impermax-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/.idea/impermax-sdk.iml +12 -0
  2. package/.idea/misc.xml +6 -0
  3. package/.idea/modules.xml +8 -0
  4. package/.idea/workspace.xml +642 -0
  5. package/abis/ImpermaxABI.ts +3 -0
  6. package/abis/contracts/BAllowance.json +4735 -0
  7. package/abis/contracts/BDeployer.json +1195 -0
  8. package/abis/contracts/BInterestRateModel.json +10796 -0
  9. package/abis/contracts/BSetter.json +6219 -0
  10. package/abis/contracts/BStorage.json +2613 -0
  11. package/abis/contracts/Borrowable.json +19937 -0
  12. package/abis/contracts/CDeployer.json +1104 -0
  13. package/abis/contracts/CSetter.json +5094 -0
  14. package/abis/contracts/CStorage.json +516 -0
  15. package/abis/contracts/ClaimAggregator.json +2015 -0
  16. package/abis/contracts/Collateral.json +21615 -0
  17. package/abis/contracts/ERC20.json +819 -0
  18. package/abis/contracts/Factory.json +21986 -0
  19. package/abis/contracts/FarmingPool.json +8601 -0
  20. package/abis/contracts/IBDeployer.json +351 -0
  21. package/abis/contracts/IBorrowTracker.json +346 -0
  22. package/abis/contracts/IBorrowable.json +13207 -0
  23. package/abis/contracts/ICDeployer.json +294 -0
  24. package/abis/contracts/IClaimable.json +406 -0
  25. package/abis/contracts/ICollateral.json +8952 -0
  26. package/abis/contracts/IERC20.json +2376 -0
  27. package/abis/contracts/IFactory.json +3660 -0
  28. package/abis/contracts/IFarmingPool.json +3584 -0
  29. package/abis/contracts/IImpermaxCallee.json +679 -0
  30. package/abis/contracts/IMerkleDistributor.json +1134 -0
  31. package/abis/contracts/IPoolToken.json +5343 -0
  32. package/abis/contracts/IRouter01.json +6891 -0
  33. package/abis/contracts/IRouter02.json +7283 -0
  34. package/abis/contracts/ISimpleUniswapOracle.json +1469 -0
  35. package/abis/contracts/IStakedLPToken.json +7309 -0
  36. package/abis/contracts/IStakingRewards.json +1036 -0
  37. package/abis/contracts/IUniswapV2Callee.json +403 -0
  38. package/abis/contracts/IUniswapV2ERC20.json +3155 -0
  39. package/abis/contracts/IUniswapV2Factory.json +1690 -0
  40. package/abis/contracts/IUniswapV2Pair.json +6761 -0
  41. package/abis/contracts/IWETH.json +561 -0
  42. package/abis/contracts/ImpermaxChef.json +20945 -0
  43. package/abis/contracts/ImpermaxERC20.json +12095 -0
  44. package/abis/contracts/Math.json +1966 -0
  45. package/abis/contracts/MockERC20.json +8884 -0
  46. package/abis/contracts/PoolToken.json +10784 -0
  47. package/abis/contracts/Router01.json +43963 -0
  48. package/abis/contracts/SafeMath.json +6828 -0
  49. package/abis/contracts/SimpleUniswapOracle.json +9640 -0
  50. package/abis/contracts/TransferHelper.json +4875 -0
  51. package/abis/contracts/UQ112x112.json +1201 -0
  52. package/abis/contracts/UniswapV2ERC20.json +10969 -0
  53. package/abis/contracts/UniswapV2Factory.json +5521 -0
  54. package/abis/contracts/UniswapV2Library.json +13789 -0
  55. package/abis/contracts/UniswapV2Pair.json +30782 -0
  56. package/abis/contracts/WETH9.json +6613 -0
  57. package/config/amms.ts +199 -0
  58. package/config/contracts/claim-aggregators.ts +16 -0
  59. package/config/contracts/impermax-chef.ts +16 -0
  60. package/config/contracts/imxes.ts +16 -0
  61. package/config/contracts/merkle-distributors.ts +13 -0
  62. package/config/contracts/routers.ts +36 -0
  63. package/config/contracts/simple-uniswap-oracles.ts +33 -0
  64. package/config/contracts/weths.ts +18 -0
  65. package/config/debank-ids.ts +15 -0
  66. package/config/endpoints/merkle-distributors.ts +13 -0
  67. package/config/eth.ts +32 -0
  68. package/config/factories.ts +26 -0
  69. package/config/farms.ts +119 -0
  70. package/config/general.ts +8 -0
  71. package/config/subgraphs.ts +69 -0
  72. package/config/types.ts +81 -0
  73. package/impermax-router/Account.ts +123 -0
  74. package/impermax-router/AccountBorrowable.ts +110 -0
  75. package/impermax-router/AccountCollateral.ts +40 -0
  76. package/impermax-router/AccountLendingPool.ts +231 -0
  77. package/impermax-router/AccountPoolToken.ts +76 -0
  78. package/impermax-router/Borrowable.ts +86 -0
  79. package/impermax-router/Collateral.ts +26 -0
  80. package/impermax-router/ContractsHelper.ts +64 -0
  81. package/impermax-router/ImpermaxFactory.ts +47 -0
  82. package/impermax-router/Interactions.ts +94 -0
  83. package/impermax-router/InteractionsLendingPool.ts +129 -0
  84. package/impermax-router/InteractionsPoolToken.ts +187 -0
  85. package/impermax-router/LendingPool.ts +256 -0
  86. package/impermax-router/PoolToken.ts +112 -0
  87. package/impermax-router/index.ts +49 -0
  88. package/impermax-router/interfaces.ts +233 -0
  89. package/index.ts +5 -0
  90. package/package.json +23 -0
  91. package/subgraph/Account.ts +93 -0
  92. package/subgraph/AccountLendingPool.ts +60 -0
  93. package/subgraph/AccountPoolToken.ts +60 -0
  94. package/subgraph/LendingPool.ts +179 -0
  95. package/subgraph/PoolToken.ts +381 -0
  96. package/subgraph/PriceHelper.ts +150 -0
  97. package/subgraph/SolidexHelper.ts +54 -0
  98. package/subgraph/index.ts +166 -0
  99. package/subgraph/initializer.ts +509 -0
  100. package/subgraph/query.ts +224 -0
  101. package/tsconfig.json +16 -0
  102. package/utils/ether-utils.ts +22 -0
  103. package/utils/index.ts +12 -0
@@ -0,0 +1,1104 @@
1
+ {
2
+ "contractName": "CDeployer",
3
+ "abi": [
4
+ {
5
+ "inputs": [],
6
+ "payable": false,
7
+ "stateMutability": "nonpayable",
8
+ "type": "constructor"
9
+ },
10
+ {
11
+ "constant": false,
12
+ "inputs": [
13
+ {
14
+ "internalType": "address",
15
+ "name": "uniswapV2Pair",
16
+ "type": "address"
17
+ }
18
+ ],
19
+ "name": "deployCollateral",
20
+ "outputs": [
21
+ {
22
+ "internalType": "address",
23
+ "name": "collateral",
24
+ "type": "address"
25
+ }
26
+ ],
27
+ "payable": false,
28
+ "stateMutability": "nonpayable",
29
+ "type": "function"
30
+ }
31
+ ],
32
+ "metadata": "{\"compiler\":{\"version\":\"0.5.16+commit.9c3226ce\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"uniswapV2Pair\",\"type\":\"address\"}],\"name\":\"deployCollateral\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"collateral\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CDeployer.sol\":\"CDeployer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CDeployer.sol\":{\"keccak256\":\"0xa154489201ffb8abe90c496d1ac3570fd1fb4cb70f3a5bccbac367b1fdd43aab\",\"urls\":[\"bzz-raw://53b69bf7c34ca297dc48ce48b1bdb5155d7eb3eb115ef77c72a676e27f440c87\",\"dweb:/ipfs/QmPdxk6VV5xBJSopLXJKXVMKEXrK4FVX36e3vu4tafBhX2\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CSetter.sol\":{\"keccak256\":\"0x2d2c007966c4f25245f1dc5d4fdb7ed06e03a06dbb5811a74b03feef7c5c6525\",\"urls\":[\"bzz-raw://a414b11736dbb5760ec39c49dd57b137f56f17eed03a96437467aab6f3a9b8f0\",\"dweb:/ipfs/QmTFhg8BYYinrqrTBnqA6Ktspz9Ht2J1jt1RNiH5tHJ32g\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CStorage.sol\":{\"keccak256\":\"0xf1b7007b9ff996614c737f039c5ce3b2d578eeb690b1cd47baa51ad847f3c0a5\",\"urls\":[\"bzz-raw://4060bc1bd96534b571168ff813d1af019da19af01ad685f2eb611af15eed4e6d\",\"dweb:/ipfs/QmYDQ9rXk6gZh1ADVsaTKyR8Do6gsyTXqhqd7CnFDoSotS\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/Collateral.sol\":{\"keccak256\":\"0x401a024009777bc1a887b609e93799216da6afbdb114f7c3db8330b0dd70b1c9\",\"urls\":[\"bzz-raw://f20074c14325596d59ecf93b9540d8b0ddbe0ef83394bca945caacde851ac92b\",\"dweb:/ipfs/QmThZBromVHqp2TgXdhfuPwGQbNKeoLzNcZy83qopEyewU\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/ImpermaxERC20.sol\":{\"keccak256\":\"0x7bf487094af4e32db8cc5e779450c87d86d0e65fdae32052ccad8a26462bd07c\",\"urls\":[\"bzz-raw://25b17403257768c87f754b090b283a18e32660f3ecc0ecc2b56a9d7022608756\",\"dweb:/ipfs/QmQBvgrgsqMg9msxACLXQzkP8W1mGiNg8dqYUNQfVMHYrQ\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/PoolToken.sol\":{\"keccak256\":\"0xa0a1ceee2628b2c69d8aa453f571835e3bccf47071a7290f892519e5d9e72300\",\"urls\":[\"bzz-raw://0fa208526bdbde5576895faba97fb92c5db9203fdcc81a1d5b565905999b2fa3\",\"dweb:/ipfs/QmRjuTDeq7VTufRw7ibXsD2KYXWiv72FWREp6ePv7wTRjb\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IBorrowable.sol\":{\"keccak256\":\"0x16a157ab22e3d76a6cf0dd89f55d6426abd8b15ac641ce318e3fa22e7dd1284b\",\"urls\":[\"bzz-raw://368476ee8b1e9d5287cbac49ceaae1e230e4ab95426a00141fbd43b6477d2928\",\"dweb:/ipfs/QmPN3cm2TJUJG3tXa6zCeCWrcitjPP6SofwHpygaiQJ9CV\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/ICDeployer.sol\":{\"keccak256\":\"0x5bd521171c6ef60b554d88475d14fd55b3862a3e42e663434dce7c0a625d15dc\",\"urls\":[\"bzz-raw://a6cf5482d61f77ff6a1ca7974baa006b525e18d646ad766bed232ed420d88db3\",\"dweb:/ipfs/QmX9gUoD3V1fF2PyYsEXCyWxhmHEi6wcSbBpPvUgvSK9Zz\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/ICollateral.sol\":{\"keccak256\":\"0x354b560bca7dcce7550c2c0c7f7ed050baf0f251277a9308fd568e03c61e1ce5\",\"urls\":[\"bzz-raw://8c422658288da6ad5055644d8dc236c37d7e58fdd83016ef37ea27459fa1dc82\",\"dweb:/ipfs/QmNigfZAkA1tNoPsmPpA6gqt9YPcxeubCiyMkowwSJ89B2\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IERC20.sol\":{\"keccak256\":\"0x61db17aebc5d812c7002d15c1da954065e56abe49d64b14c034abe5604d70eb3\",\"urls\":[\"bzz-raw://b006685e753f9120469f10b09c159f222d4cb8b507a6c1f0c14ed50c883ebe66\",\"dweb:/ipfs/QmSyY7iTugbczPwfGK67etiyPULenYGzzRYbt8aabwwkUb\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IFactory.sol\":{\"keccak256\":\"0xc800bcea5a98412b8d52a11289f6e174cc5ecd68c3bf4ea949fe7fffac78daf0\",\"urls\":[\"bzz-raw://6985cfcce7192c6943ee2c70c0458636a50460239c0e3fae8e7a2ffc6d7fb950\",\"dweb:/ipfs/QmdTxGx9dq7YeKk7AJ2XQcroHsRUCaYTkQAetpGi1mK643\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IImpermaxCallee.sol\":{\"keccak256\":\"0x8a34b6c59347d7246d45561ea6de67b7627bee144045fce316f3225e36a2165a\",\"urls\":[\"bzz-raw://22293bc770da410f1b534be76073f28f64ab62aeba8cae7225fc2058ab2356b1\",\"dweb:/ipfs/QmUmYVC4hUgqL8YGvVbTnFGzk4QbXw7zCGeA5EkuAEJtFN\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IPoolToken.sol\":{\"keccak256\":\"0x10612c60a75d45933558f7fbba0cb4ee15c8eed3b838f326aa747f200dd9cee5\",\"urls\":[\"bzz-raw://3ab5e233942f1b60a8abd4becd18fee98bf8085643837c426c87c7f9d2ad7e50\",\"dweb:/ipfs/QmbHjUhcUkaTiRYci4WBHBERjuiZfaBu67RvncTZgbod7Y\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/ISimpleUniswapOracle.sol\":{\"keccak256\":\"0xa2f209baa6d5e0ca8e7432b0b1dee8ce809a71df31008531093bce477f80ddd8\",\"urls\":[\"bzz-raw://3084c22ed447612691a33ed7899cf96e2456c96fa1dd37ca6665bcda1e0ecf2c\",\"dweb:/ipfs/QmTsyVhwHGLxUdifLPwmeJP24JwxxKvnXpsatLLnyQ9VBp\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IUniswapV2Pair.sol\":{\"keccak256\":\"0x980d3826efc0159cd12a5be3cc5c00bef0ae038d16cadb20a9180b646ef3e84d\",\"urls\":[\"bzz-raw://4a0297cf35984f72e0683dfcb5f69e246de455c677d7a3a1ce53ad9550b8bbd3\",\"dweb:/ipfs/QmZnxucJtcWWUVpQEykUUfjmEypy6cvLtVPuCx7KAaiS4k\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/libraries/Math.sol\":{\"keccak256\":\"0x17d7ca549e9f536147f717238c57cddf95880ccf1ba8abfad24a0b062d353568\",\"urls\":[\"bzz-raw://24ae906f11890c9cfd6d6213f1284d697511cb5d70d73a7cdb132e5f7d8eca94\",\"dweb:/ipfs/QmQqC1N4A5DCSdUfWF1nEN2ikKg1gGzx23LvMMtSTsS6mp\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/libraries/SafeMath.sol\":{\"keccak256\":\"0xe362afec478ef9d8f773dec0e95b2948fb37319f622aa48bf4079bf30b81dad3\",\"urls\":[\"bzz-raw://32072de977d6be362cff13445b105f26b07485821357a2262a70078c500c42d5\",\"dweb:/ipfs/QmPnczieHKRGB3PJESwqB4XaBnmXsJJXk4ikyg8uQPXptG\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/libraries/UQ112x112.sol\":{\"keccak256\":\"0x88b3a1124aa6f081449aaae51f26ea7fd3ded8ec9881e6dde1062376c84d318c\",\"urls\":[\"bzz-raw://c7d29625ffdd7e3fe499b8ce4e64721945ee972c6d23270bb3b07ccb1e8a1557\",\"dweb:/ipfs/QmTNHk5jRvEu4LJFg1imy1M14B4J8RZQWMTtkPUktPMKZh\"]}},\"version\":1}",
33
+ "bytecode": "0x608060405234801561001057600080fd5b50614fdc806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80637924fedd14610030575b600080fd5b6100726004803603602081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006060604051806020016100c890610182565b6020820181038252601f19601f82011660405250905060003384604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f592505050919050565b614e18806101908339019056fe60806040526012600260006101000a81548160ff021916908360ff1602179055506001600b60006101000a81548160ff0219169083151502179055506715f155637eba0c00600e55670e6ed27d66680000600f5534801561005f57600080fd5b50614da98061006f6000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80637ecebe0011610146578063bb6ff386116100c3578063c548e3c511610087578063c548e3c514610c63578063d490e7e014610d91578063d505accf14610daf578063daf8881814610e48578063dd62ed3e14610e92578063fff6cae914610f0a5761025e565b8063bb6ff38614610b64578063bc25cf7714610b92578063bc9bd12a14610bd6578063bd9a548b14610bf4578063c45a015514610c195761025e565b8063a9059cbb1161010a578063a9059cbb14610a22578063ad7a672f14610a88578063afc8276c14610aa6578063b2a02ff114610ac4578063ba9a7a5614610b465761025e565b80637ecebe001461084b5780638c765e94146108a357806395a2251f146108c157806395d89b41146109195780639aac2c531461099c5761025e565b80633644e515116101df5780636a627842116101a35780636a6278421461062e5780636e01be10146106865780636f13cb83146106ec5780636f307dc31461075f57806370a08231146107a95780637c6674b5146108015761025e565b80633644e5151461055b5780633ba0b9a9146105795780634a5d316c146105975780634fd42e17146105a15780635a0f03c6146105cf5761025e565b806323b872dd1161022657806323b872dd1461042b5780632fa5ae1b146104b157806330adf81f146104fb578063313ce56714610519578063356c571f1461053d5761025e565b806306fdde0314610263578063095ea7b3146102e65780630fb60fef1461034c57806318160ddd1461036a57806319f3400d14610388575b600080fd5b61026b610f14565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610332600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb2565b604051808215151515815260200191505060405180910390f35b610354610fc9565b6040518082815260200191505060405180910390f35b610372610fd5565b6040518082815260200191505060405180910390f35b6104296004803603606081101561039e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103e557600080fd5b8201836020820111156103f757600080fd5b8035906020019184600183028401116401000000008311171561041957600080fd5b9091929391929390505050610fdb565b005b6104976004803603606081101561044157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611364565b604051808215151515815260200191505060405180910390f35b6104b9611566565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61050361158c565b6040518082815260200191505060405180910390f35b6105216115b3565b604051808260ff1660ff16815260200191505060405180910390f35b6105456115c6565b6040518082815260200191505060405180910390f35b6105636115cc565b6040518082815260200191505060405180910390f35b6105816115d2565b6040518082815260200191505060405180910390f35b61059f61163c565b005b6105cd600480360360208110156105b757600080fd5b8101908080359060200190929190505050611743565b005b610611600480360360208110156105e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611857565b604051808381526020018281526020019250505060405180910390f35b6106706004803603602081101561064457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188e565b6040518082815260200191505060405180910390f35b6106d26004803603604081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ba1565b604051808215151515815260200191505060405180910390f35b6107426004803603606081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e16565b604051808381526020018281526020019250505060405180910390f35b6107676120b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107eb600480360360208110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d8565b6040518082815260200191505060405180910390f35b6108096120f0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61088d6004803603602081101561086157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612116565b6040518082815260200191505060405180910390f35b6108ab61212e565b6040518082815260200191505060405180910390f35b610903600480360360208110156108d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612134565b6040518082815260200191505060405180910390f35b6109216123e5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610961578082015181840152602081019050610946565b50505050905090810190601f16801561098e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a08600480360360608110156109b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612483565b604051808215151515815260200191505060405180910390f35b610a6e60048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612689565b604051808215151515815260200191505060405180910390f35b610a906126a0565b6040518082815260200191505060405180910390f35b610aae6126a6565b6040518082815260200191505060405180910390f35b610b3060048036036060811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b2565b6040518082815260200191505060405180910390f35b610b4e612af7565b6040518082815260200191505060405180910390f35b610b9060048036036020811015610b7a57600080fd5b8101908080359060200190929190505050612afd565b005b610bd460048036036020811015610ba857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c11565b005b610bde612dc3565b6040518082815260200191505060405180910390f35b610bfc612dcf565b604051808381526020018281526020019250505060405180910390f35b610c216132ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d8f600480360360a0811015610c7957600080fd5b8101908080359060200190640100000000811115610c9657600080fd5b820183602082011115610ca857600080fd5b80359060200191846001830284011164010000000083111715610cca57600080fd5b909192939192939080359060200190640100000000811115610ceb57600080fd5b820183602082011115610cfd57600080fd5b80359060200191846001830284011164010000000083111715610d1f57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132d4565b005b610d996135d8565b6040518082815260200191505060405180910390f35b610e46600480360360e0811015610dc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506135e4565b005b610e5061362b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ef460048036036040811015610ea857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613651565b6040518082815260200191505060405180910390f35b610f12613676565b005b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b505050505081565b6000610fbf338484613738565b6001905092915050565b6710ff2af864d4fc0081565b60035481565b600b60009054906101000a900460ff1661105d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550600a548311156110f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b6110fa8484613823565b60008282905011156111da578373ffffffffffffffffffffffffffffffffffffffff1663acb86cbb338585856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b6000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061126760016112596112306115d2565b61124b670de0b6b3a76400008a613a9190919063ffffffff16565b613b1790919063ffffffff16565b613b6190919063ffffffff16565b9050808210156112c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614cbd6024913960400191505060405180910390fd5b6112cc3083613be9565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8785604051808381526020018281526020019250505060405180910390a35050611343613d03565b6001600b60006101000a81548160ff02191690831515021790555050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611550576114cf826040518060400160405280601e81526020017f496d7065726d61783a205452414e534645525f4e4f545f414c4c4f5745440000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e1e9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61155b848484613ede565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600260009054906101000a900460ff1681565b600e5481565b60065481565b60008060035490506000600a54905060008214806115f05750600081145b1561160757670de0b6b3a764000092505050611639565b61163482611626670de0b6b3a764000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b925050505b90565b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496d7065726d61783a20464143544f52595f414c52454144595f53455400000081525060200191505060405180910390fd5b33600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b60009054906101000a900460ff166117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506117fb81670e043da617250000670e92596fd6290000613f6a565b80600f819055507f8a9bb9067f9ecb13a322b548e6df3dd1bd10a54698834dac43ed8f0e765bf94d816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b600080611885837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80611e16565b91509150915091565b6000600b60009054906101000a900460ff16611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b810190808051906020019092919050505090506000611a22600a548361406390919063ffffffff16565b9050611a58611a2f6115d2565b611a4a670de0b6b3a764000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b925060006003541415611a8a57611a7a6103e88461406390919063ffffffff16565b9250611a8960006103e86140ad565b5b60008311611b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496d7065726d61783a204d494e545f414d4f554e545f5a45524f00000000000081525060200191505060405180910390fd5b611b0a84846140ad565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8386604051808381526020018281526020019250505060405180910390a35050611b81613d03565b6001600b60006101000a81548160ff021916908315150217905550919050565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611bf8576000915050611e10565b600083820390506000611c35670de0b6b3a7640000611c27611c186115d2565b85613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd857600080fd5b505afa158015611cec573d6000803e3d6000fd5b505050506040513d6020811015611d0257600080fd5b810190808051906020019092919050505090506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d6020811015611de057600080fd5b810190808051906020019092919050505090506000611e008484846141c7565b9150506000811496505050505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841415611f1e57600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ee057600080fd5b505afa158015611ef4573d6000803e3d6000fd5b505050506040513d6020811015611f0a57600080fd5b810190808051906020019092919050505093505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561202357600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fe557600080fd5b505afa158015611ff9573d6000803e3d6000fd5b505050506040513d602081101561200f57600080fd5b810190808051906020019092919050505092505b6000612098670de0b6b3a764000061208a61203c6115d2565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506120a58186866141c7565b9250925050935093915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915090505481565b600f5481565b6000600b60009054906101000a900460ff166121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061224b670de0b6b3a764000061223d61222e6115d2565b84613a9190919063ffffffff16565b613b1790919063ffffffff16565b9150600082116122c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a2052454445454d5f414d4f554e545f5a45524f0000000081525060200191505060405180910390fd5b600a5482111561233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b6123458383613823565b61234f3082613be9565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8484604051808381526020018281526020019250505060405180910390a3506123c5613d03565b6001600b60006101000a81548160ff021916908315150217905550919050565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561247b5780601f106124505761010080835404028352916020019161247b565b820191906000526020600020905b81548152906001019060200180831161245e57829003601f168201915b505050505081565b600080600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061253757508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b6125a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a20494e56414c49445f424f52524f5741424c450000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612604577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612606565b845b905060008273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612663577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612665565b855b90506000612674898484611e16565b91505060008114955050505050509392505050565b6000612696338484613ede565b6001905092915050565b600a5481565b670e92596fd629000081565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061275d5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b60006127da84611857565b91505060008111612853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f496d7065726d61783a20494e53554646494349454e545f53484f525446414c4c81525060200191505060405180910390fd5b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156128bd576128b3612dcf565b50809150506128cc565b6128c5612dcf565b9050809150505b6129266128d76115d2565b6129188361290a670de0b6b3a76400006128fc600f548b613a9190919063ffffffff16565b613b1790919063ffffffff16565b613a9190919063ffffffff16565b613b1790919063ffffffff16565b92506129b1836040518060400160405280601e81526020017f496d7065726d61783a204c49515549444154494e475f544f4f5f4d5543480000815250600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e1e9092919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a4683600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6190919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350509392505050565b6103e881565b600b60009054906101000a900460ff16612b7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550612bb5816710ff2af864d4fc006715f15565d2c5f000613f6a565b80600e819055507fdff9a61839be6f6ce5ea77311cc351786a39a9f337c507ff35e7b358fd39c043816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff16612c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550612da581612da0600a54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612d5757600080fd5b505afa158015612d6b573d6000803e3d6000fd5b505050506040513d6020811015612d8157600080fd5b810190808051906020019092919050505061406390919063ffffffff16565b613823565b6001600b60006101000a81548160ff02191690831515021790555050565b670e043da61725000081565b6000806000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663446a37e0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612e9657600080fd5b505af1158015612eaa573d6000803e3d6000fd5b505050506040513d6040811015612ec057600080fd5b810190808051906020019092919080519060200190929190505050509050600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f4957600080fd5b505afa158015612f5d573d6000803e3d6000fd5b505050506040513d6060811015612f7357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505050915091506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561300757600080fd5b505afa15801561301b573d6000803e3d6000fd5b505050506040513d602081101561303157600080fd5b81019080805190602001909291905050509050600061307f8461305385614331565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661435c90919063ffffffff16565b905060006130e9827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166130db640100000000897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613a9190919063ffffffff16565b613b1790919063ffffffff16565b9050600061310d61310864010000000084613a9190919063ffffffff16565b6143bc565b90506000613151600288026dffffffffffffffffffffffffffff16613143670de0b6b3a764000088613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506000613195600288026dffffffffffffffffffffffffffff16613187670de0b6b3a764000089613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506131c16401000000006131b38585613a9190919063ffffffff16565b613b1790919063ffffffff16565b9a506131ed836131df64010000000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b995060648b11613248576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ce16021913960400191505060405180910390fd5b60648a116132a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ce16021913960400191505060405180910390fd5b5050505050505050509091565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b61342987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061441e565b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c6674b56040518163ffffffff1660e01b815260040160206040518083038186803b15801561355457600080fd5b505afa158015613568573d6000803e3d6000fd5b505050506040513d602081101561357e57600080fd5b8101908080519060200190929190505050600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b6715f15565d2c5f00081565b613617878787878787877f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b61452a565b613622878787613738565b50505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052816000526040600020602052806000526040600020600091509150505481565b600b60009054906101000a900460ff166136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff02191690831515021790555061371b613d03565b6001600b60006101000a81548160ff021916908315150217905550565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60006060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613972578051825260208201915060208101905060208303925061394f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146139d4576040519150601f19603f3d011682016040523d82523d6000602084013e6139d9565b606091505b5091509150818015613a195750600081511480613a185750808060200190516020811015613a0657600080fd5b81019080805190602001909291905050505b5b613a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a205452414e534645525f4641494c45440000000000000081525060200191505060405180910390fd5b50505050565b600080831415613aa45760009050613b11565b6000828402905082848281613ab557fe5b0414613b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d546021913960400191505060405180910390fd5b809150505b92915050565b6000613b5983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614841565b905092915050565b600080828401905083811015613bdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613c3b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461406390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c938160035461406390919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d6020811015613dcc57600080fd5b8101908080519060200190929190505050600a819055507f8a0df8ef054fae2c3d2d19a7b322e864870cc9fd3cb07fb9526309c596244bf4600a546040518082815260200191505060405180910390a1565b6000838311158290613ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e90578082015181840152602081019050613e75565b50505050905090810190601f168015613ebd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613ee88382611ba1565b613f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f496d7065726d61783a20494e53554646494349454e545f4c495155494449545981525060200191505060405180910390fd5b613f65838383614907565b505050565b613f72614ad2565b81831015613fe8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b8083111561405e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b505050565b60006140a583836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250613e1e565b905092915050565b6140c281600354613b6190919063ffffffff16565b60038190555061411a81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6190919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000806000600e5490506000806141dc612dcf565b91509150600061420f670de0b6b3a7640000614201858b613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506000614240670de0b6b3a7640000614232858b613a9190919063ffffffff16565b613b1790919063ffffffff16565b90508082101561425557808280925081935050505b614282670de0b6b3a76400006142748785613a9190919063ffffffff16565b613b1790919063ffffffff16565b91506142b1856142a3670de0b6b3a764000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b905060006142f6670de0b6b3a76400006142e8600f546142da8688613b6190919063ffffffff16565b613a9190919063ffffffff16565b613b1790919063ffffffff16565b9050808b1061431657808b03600080905097509750505050505050614329565b60008b8203819150975097505050505050505b935093915050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16816143b357fe5b04905092915050565b6000600382111561440b5781905060006001600284816143d857fe5b040190505b81811015614405578091506002818285816143f457fe5b0401816143fd57fe5b0490506143dd565b50614419565b6000821461441857600190505b5b919050565b8160009080519060200190614434929190614c17565b50806001908051906020019061444b929190614c17565b5060004690506040518080614d02605291396052019050604051809103902083805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120600681905550505050565b428510156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496d7065726d61783a204558504952454400000000000000000000000000000081525060200191505060405180910390fd5b6000600654828a8a8a600760008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561474f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156147c357508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b614835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e56414c49445f5349474e4154555245000000000081525060200191505060405180910390fd5b50505050505050505050565b600080831182906148ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148b2578082015181840152602081019050614897565b50505050905090810190601f1680156148df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816148f957fe5b049050809150509392505050565b614990816040518060400160405280601b81526020017f496d7065726d61783a205452414e534645525f544f4f5f484947480000000000815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e1e9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a2581600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6190919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015614b3a57600080fd5b505afa158015614b4e573d6000803e3d6000fd5b505050506040513d6020811015614b6457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614c15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c5857805160ff1916838001178555614c86565b82800160010185558215614c86579182015b82811115614c85578251825591602001919060010190614c6a565b5b509050614c939190614c97565b5090565b614cb991905b80821115614cb5576000816000905550600101614c9d565b5090565b9056fe496d7065726d61783a20494e53554646494349454e545f52454445454d5f544f4b454e53496d7065726d61783a2050524943455f43414c43554c4154494f4e5f4552524f52454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158207046b2f9e9604eb7e8248413a7cf853c486109e907ef4d0637e3776e3513279164736f6c63430005100032a265627a7a72315820568afad4fc02efc16d5d4b5efda4ac383116a7e8a2edac83de29f52937068be964736f6c63430005100032",
34
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80637924fedd14610030575b600080fd5b6100726004803603602081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006060604051806020016100c890610182565b6020820181038252601f19601f82011660405250905060003384604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f592505050919050565b614e18806101908339019056fe60806040526012600260006101000a81548160ff021916908360ff1602179055506001600b60006101000a81548160ff0219169083151502179055506715f155637eba0c00600e55670e6ed27d66680000600f5534801561005f57600080fd5b50614da98061006f6000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80637ecebe0011610146578063bb6ff386116100c3578063c548e3c511610087578063c548e3c514610c63578063d490e7e014610d91578063d505accf14610daf578063daf8881814610e48578063dd62ed3e14610e92578063fff6cae914610f0a5761025e565b8063bb6ff38614610b64578063bc25cf7714610b92578063bc9bd12a14610bd6578063bd9a548b14610bf4578063c45a015514610c195761025e565b8063a9059cbb1161010a578063a9059cbb14610a22578063ad7a672f14610a88578063afc8276c14610aa6578063b2a02ff114610ac4578063ba9a7a5614610b465761025e565b80637ecebe001461084b5780638c765e94146108a357806395a2251f146108c157806395d89b41146109195780639aac2c531461099c5761025e565b80633644e515116101df5780636a627842116101a35780636a6278421461062e5780636e01be10146106865780636f13cb83146106ec5780636f307dc31461075f57806370a08231146107a95780637c6674b5146108015761025e565b80633644e5151461055b5780633ba0b9a9146105795780634a5d316c146105975780634fd42e17146105a15780635a0f03c6146105cf5761025e565b806323b872dd1161022657806323b872dd1461042b5780632fa5ae1b146104b157806330adf81f146104fb578063313ce56714610519578063356c571f1461053d5761025e565b806306fdde0314610263578063095ea7b3146102e65780630fb60fef1461034c57806318160ddd1461036a57806319f3400d14610388575b600080fd5b61026b610f14565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ab578082015181840152602081019050610290565b50505050905090810190601f1680156102d85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610332600480360360408110156102fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fb2565b604051808215151515815260200191505060405180910390f35b610354610fc9565b6040518082815260200191505060405180910390f35b610372610fd5565b6040518082815260200191505060405180910390f35b6104296004803603606081101561039e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156103e557600080fd5b8201836020820111156103f757600080fd5b8035906020019184600183028401116401000000008311171561041957600080fd5b9091929391929390505050610fdb565b005b6104976004803603606081101561044157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611364565b604051808215151515815260200191505060405180910390f35b6104b9611566565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61050361158c565b6040518082815260200191505060405180910390f35b6105216115b3565b604051808260ff1660ff16815260200191505060405180910390f35b6105456115c6565b6040518082815260200191505060405180910390f35b6105636115cc565b6040518082815260200191505060405180910390f35b6105816115d2565b6040518082815260200191505060405180910390f35b61059f61163c565b005b6105cd600480360360208110156105b757600080fd5b8101908080359060200190929190505050611743565b005b610611600480360360208110156105e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611857565b604051808381526020018281526020019250505060405180910390f35b6106706004803603602081101561064457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061188e565b6040518082815260200191505060405180910390f35b6106d26004803603604081101561069c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ba1565b604051808215151515815260200191505060405180910390f35b6107426004803603606081101561070257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050611e16565b604051808381526020018281526020019250505060405180910390f35b6107676120b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107eb600480360360208110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120d8565b6040518082815260200191505060405180910390f35b6108096120f0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61088d6004803603602081101561086157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612116565b6040518082815260200191505060405180910390f35b6108ab61212e565b6040518082815260200191505060405180910390f35b610903600480360360208110156108d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612134565b6040518082815260200191505060405180910390f35b6109216123e5565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610961578082015181840152602081019050610946565b50505050905090810190601f16801561098e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a08600480360360608110156109b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612483565b604051808215151515815260200191505060405180910390f35b610a6e60048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612689565b604051808215151515815260200191505060405180910390f35b610a906126a0565b6040518082815260200191505060405180910390f35b610aae6126a6565b6040518082815260200191505060405180910390f35b610b3060048036036060811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506126b2565b6040518082815260200191505060405180910390f35b610b4e612af7565b6040518082815260200191505060405180910390f35b610b9060048036036020811015610b7a57600080fd5b8101908080359060200190929190505050612afd565b005b610bd460048036036020811015610ba857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c11565b005b610bde612dc3565b6040518082815260200191505060405180910390f35b610bfc612dcf565b604051808381526020018281526020019250505060405180910390f35b610c216132ae565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610d8f600480360360a0811015610c7957600080fd5b8101908080359060200190640100000000811115610c9657600080fd5b820183602082011115610ca857600080fd5b80359060200191846001830284011164010000000083111715610cca57600080fd5b909192939192939080359060200190640100000000811115610ceb57600080fd5b820183602082011115610cfd57600080fd5b80359060200191846001830284011164010000000083111715610d1f57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132d4565b005b610d996135d8565b6040518082815260200191505060405180910390f35b610e46600480360360e0811015610dc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506135e4565b005b610e5061362b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ef460048036036040811015610ea857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613651565b6040518082815260200191505060405180910390f35b610f12613676565b005b60008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610faa5780601f10610f7f57610100808354040283529160200191610faa565b820191906000526020600020905b815481529060010190602001808311610f8d57829003601f168201915b505050505081565b6000610fbf338484613738565b6001905092915050565b6710ff2af864d4fc0081565b60035481565b600b60009054906101000a900460ff1661105d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550600a548311156110f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b6110fa8484613823565b60008282905011156111da578373ffffffffffffffffffffffffffffffffffffffff1663acb86cbb338585856040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b505050505b6000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061126760016112596112306115d2565b61124b670de0b6b3a76400008a613a9190919063ffffffff16565b613b1790919063ffffffff16565b613b6190919063ffffffff16565b9050808210156112c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614cbd6024913960400191505060405180910390fd5b6112cc3083613be9565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8785604051808381526020018281526020019250505060405180910390a35050611343613d03565b6001600b60006101000a81548160ff02191690831515021790555050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611550576114cf826040518060400160405280601e81526020017f496d7065726d61783a205452414e534645525f4e4f545f414c4c4f5745440000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e1e9092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61155b848484613ede565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600260009054906101000a900460ff1681565b600e5481565b60065481565b60008060035490506000600a54905060008214806115f05750600081145b1561160757670de0b6b3a764000092505050611639565b61163482611626670de0b6b3a764000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b925050505b90565b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496d7065726d61783a20464143544f52595f414c52454144595f53455400000081525060200191505060405180910390fd5b33600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600b60009054906101000a900460ff166117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506117fb81670e043da617250000670e92596fd6290000613f6a565b80600f819055507f8a9bb9067f9ecb13a322b548e6df3dd1bd10a54698834dac43ed8f0e765bf94d816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b600080611885837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80611e16565b91509150915091565b6000600b60009054906101000a900460ff16611912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156119ce57600080fd5b505afa1580156119e2573d6000803e3d6000fd5b505050506040513d60208110156119f857600080fd5b810190808051906020019092919050505090506000611a22600a548361406390919063ffffffff16565b9050611a58611a2f6115d2565b611a4a670de0b6b3a764000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b925060006003541415611a8a57611a7a6103e88461406390919063ffffffff16565b9250611a8960006103e86140ad565b5b60008311611b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496d7065726d61783a204d494e545f414d4f554e545f5a45524f00000000000081525060200191505060405180910390fd5b611b0a84846140ad565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8386604051808381526020018281526020019250505060405180910390a35050611b81613d03565b6001600b60006101000a81548160ff021916908315150217905550919050565b600080600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611bf8576000915050611e10565b600083820390506000611c35670de0b6b3a7640000611c27611c186115d2565b85613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cd857600080fd5b505afa158015611cec573d6000803e3d6000fd5b505050506040513d6020811015611d0257600080fd5b810190808051906020019092919050505090506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611db657600080fd5b505afa158015611dca573d6000803e3d6000fd5b505050506040513d6020811015611de057600080fd5b810190808051906020019092919050505090506000611e008484846141c7565b9150506000811496505050505050505b92915050565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841415611f1e57600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611ee057600080fd5b505afa158015611ef4573d6000803e3d6000fd5b505050506040513d6020811015611f0a57600080fd5b810190808051906020019092919050505093505b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561202357600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634d73e9ba866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fe557600080fd5b505afa158015611ff9573d6000803e3d6000fd5b505050506040513d602081101561200f57600080fd5b810190808051906020019092919050505092505b6000612098670de0b6b3a764000061208a61203c6115d2565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506120a58186866141c7565b9250925050935093915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60076020528060005260406000206000915090505481565b600f5481565b6000600b60009054906101000a900460ff166121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061224b670de0b6b3a764000061223d61222e6115d2565b84613a9190919063ffffffff16565b613b1790919063ffffffff16565b9150600082116122c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a2052454445454d5f414d4f554e545f5a45524f0000000081525060200191505060405180910390fd5b600a5482111561233b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b6123458383613823565b61234f3082613be9565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8484604051808381526020018281526020019250505060405180910390a3506123c5613d03565b6001600b60006101000a81548160ff021916908315150217905550919050565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561247b5780601f106124505761010080835404028352916020019161247b565b820191906000526020600020905b81548152906001019060200180831161245e57829003601f168201915b505050505081565b600080600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061253757508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b6125a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a20494e56414c49445f424f52524f5741424c450000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612604577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612606565b845b905060008273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612663577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612665565b855b90506000612674898484611e16565b91505060008114955050505050509392505050565b6000612696338484613ede565b6001905092915050565b600a5481565b670e92596fd629000081565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061275d5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b60006127da84611857565b91505060008111612853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f496d7065726d61783a20494e53554646494349454e545f53484f525446414c4c81525060200191505060405180910390fd5b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156128bd576128b3612dcf565b50809150506128cc565b6128c5612dcf565b9050809150505b6129266128d76115d2565b6129188361290a670de0b6b3a76400006128fc600f548b613a9190919063ffffffff16565b613b1790919063ffffffff16565b613a9190919063ffffffff16565b613b1790919063ffffffff16565b92506129b1836040518060400160405280601e81526020017f496d7065726d61783a204c49515549444154494e475f544f4f5f4d5543480000815250600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e1e9092919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a4683600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6190919063ffffffff16565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a350509392505050565b6103e881565b600b60009054906101000a900460ff16612b7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550612bb5816710ff2af864d4fc006715f15565d2c5f000613f6a565b80600e819055507fdff9a61839be6f6ce5ea77311cc351786a39a9f337c507ff35e7b358fd39c043816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff16612c93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550612da581612da0600a54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612d5757600080fd5b505afa158015612d6b573d6000803e3d6000fd5b505050506040513d6020811015612d8157600080fd5b810190808051906020019092919050505061406390919063ffffffff16565b613823565b6001600b60006101000a81548160ff02191690831515021790555050565b670e043da61725000081565b6000806000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663446a37e0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b158015612e9657600080fd5b505af1158015612eaa573d6000803e3d6000fd5b505050506040513d6040811015612ec057600080fd5b810190808051906020019092919080519060200190929190505050509050600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f4957600080fd5b505afa158015612f5d573d6000803e3d6000fd5b505050506040513d6060811015612f7357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505050915091506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561300757600080fd5b505afa15801561301b573d6000803e3d6000fd5b505050506040513d602081101561303157600080fd5b81019080805190602001909291905050509050600061307f8461305385614331565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661435c90919063ffffffff16565b905060006130e9827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166130db640100000000897bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613a9190919063ffffffff16565b613b1790919063ffffffff16565b9050600061310d61310864010000000084613a9190919063ffffffff16565b6143bc565b90506000613151600288026dffffffffffffffffffffffffffff16613143670de0b6b3a764000088613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506000613195600288026dffffffffffffffffffffffffffff16613187670de0b6b3a764000089613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506131c16401000000006131b38585613a9190919063ffffffff16565b613b1790919063ffffffff16565b9a506131ed836131df64010000000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b995060648b11613248576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ce16021913960400191505060405180910390fd5b60648a116132a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614ce16021913960400191505060405180910390fd5b5050505050505050509091565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613397576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b61342987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061441e565b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c6674b56040518163ffffffff1660e01b815260040160206040518083038186803b15801561355457600080fd5b505afa158015613568573d6000803e3d6000fd5b505050506040513d602081101561357e57600080fd5b8101908080519060200190929190505050600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b6715f15565d2c5f00081565b613617878787878787877f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b61452a565b613622878787613738565b50505050505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052816000526040600020602052806000526040600020600091509150505481565b600b60009054906101000a900460ff166136f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff02191690831515021790555061371b613d03565b6001600b60006101000a81548160ff021916908315150217905550565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60006060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613972578051825260208201915060208101905060208303925061394f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146139d4576040519150601f19603f3d011682016040523d82523d6000602084013e6139d9565b606091505b5091509150818015613a195750600081511480613a185750808060200190516020811015613a0657600080fd5b81019080805190602001909291905050505b5b613a8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a205452414e534645525f4641494c45440000000000000081525060200191505060405180910390fd5b50505050565b600080831415613aa45760009050613b11565b6000828402905082848281613ab557fe5b0414613b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614d546021913960400191505060405180910390fd5b809150505b92915050565b6000613b5983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614841565b905092915050565b600080828401905083811015613bdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613c3b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461406390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c938160035461406390919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613da257600080fd5b505afa158015613db6573d6000803e3d6000fd5b505050506040513d6020811015613dcc57600080fd5b8101908080519060200190929190505050600a819055507f8a0df8ef054fae2c3d2d19a7b322e864870cc9fd3cb07fb9526309c596244bf4600a546040518082815260200191505060405180910390a1565b6000838311158290613ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e90578082015181840152602081019050613e75565b50505050905090810190601f168015613ebd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613ee88382611ba1565b613f5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f496d7065726d61783a20494e53554646494349454e545f4c495155494449545981525060200191505060405180910390fd5b613f65838383614907565b505050565b613f72614ad2565b81831015613fe8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b8083111561405e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b505050565b60006140a583836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250613e1e565b905092915050565b6140c281600354613b6190919063ffffffff16565b60038190555061411a81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6190919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000806000600e5490506000806141dc612dcf565b91509150600061420f670de0b6b3a7640000614201858b613a9190919063ffffffff16565b613b1790919063ffffffff16565b90506000614240670de0b6b3a7640000614232858b613a9190919063ffffffff16565b613b1790919063ffffffff16565b90508082101561425557808280925081935050505b614282670de0b6b3a76400006142748785613a9190919063ffffffff16565b613b1790919063ffffffff16565b91506142b1856142a3670de0b6b3a764000084613a9190919063ffffffff16565b613b1790919063ffffffff16565b905060006142f6670de0b6b3a76400006142e8600f546142da8688613b6190919063ffffffff16565b613a9190919063ffffffff16565b613b1790919063ffffffff16565b9050808b1061431657808b03600080905097509750505050505050614329565b60008b8203819150975097505050505050505b935093915050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16816143b357fe5b04905092915050565b6000600382111561440b5781905060006001600284816143d857fe5b040190505b81811015614405578091506002818285816143f457fe5b0401816143fd57fe5b0490506143dd565b50614419565b6000821461441857600190505b5b919050565b8160009080519060200190614434929190614c17565b50806001908051906020019061444b929190614c17565b5060004690506040518080614d02605291396052019050604051809103902083805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120600681905550505050565b428510156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496d7065726d61783a204558504952454400000000000000000000000000000081525060200191505060405180910390fd5b6000600654828a8a8a600760008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561474f573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156147c357508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b614835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e56414c49445f5349474e4154555245000000000081525060200191505060405180910390fd5b50505050505050505050565b600080831182906148ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156148b2578082015181840152602081019050614897565b50505050905090810190601f1680156148df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816148f957fe5b049050809150509392505050565b614990816040518060400160405280601b81526020017f496d7065726d61783a205452414e534645525f544f4f5f484947480000000000815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e1e9092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a2581600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b6190919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b158015614b3a57600080fd5b505afa158015614b4e573d6000803e3d6000fd5b505050506040513d6020811015614b6457600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614c15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614c5857805160ff1916838001178555614c86565b82800160010185558215614c86579182015b82811115614c85578251825591602001919060010190614c6a565b5b509050614c939190614c97565b5090565b614cb991905b80821115614cb5576000816000905550600101614c9d565b5090565b9056fe496d7065726d61783a20494e53554646494349454e545f52454445454d5f544f4b454e53496d7065726d61783a2050524943455f43414c43554c4154494f4e5f4552524f52454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a723158207046b2f9e9604eb7e8248413a7cf853c486109e907ef4d0637e3776e3513279164736f6c63430005100032a265627a7a72315820568afad4fc02efc16d5d4b5efda4ac383116a7e8a2edac83de29f52937068be964736f6c63430005100032",
35
+ "sourceMap": "231:384:10:-;;;268:24;8:9:-1;5:2;;;30:1;27;20:12;5:2;268:24:10;231:384;;;;;;",
36
+ "deployedSourceMap": "231:384:10:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;231:384:10;;;;;;;;;;;;;;;;;;;298:314;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;298:314:10;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;365:18;390:21;414:29;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;414:29:10;390:53;;448:12;490:10;502:13;473:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;473:43:10;;;463:54;;;;;;448:69;;598:4;587:8;581:15;576:2;566:8;562:17;559:1;551:52;537:66;;531:77;;;;;:::o;231:384::-;;;;;;;;:::o",
37
+ "source": "pragma solidity =0.5.16;\r\n\r\nimport \"./Collateral.sol\";\r\nimport \"./interfaces/ICDeployer.sol\";\r\n\r\n/*\r\n * This contract is used by the Factory to deploy Collateral(s)\r\n * The bytecode would be too long to fit in the Factory\r\n */\r\n \r\ncontract CDeployer is ICDeployer {\r\n\tconstructor () public {}\r\n\t\r\n\tfunction deployCollateral(address uniswapV2Pair) external returns (address collateral) {\r\n\t\tbytes memory bytecode = type(Collateral).creationCode;\r\n\t\tbytes32 salt = keccak256(abi.encodePacked(msg.sender, uniswapV2Pair));\r\n\t\tassembly {\r\n\t\t\tcollateral := create2(0, add(bytecode, 32), mload(bytecode), salt)\r\n\t\t}\r\n\t}\r\n}",
38
+ "sourcePath": "C:/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CDeployer.sol",
39
+ "ast": {
40
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CDeployer.sol",
41
+ "exportedSymbols": {
42
+ "CDeployer": [
43
+ 2476
44
+ ]
45
+ },
46
+ "id": 2477,
47
+ "nodeType": "SourceUnit",
48
+ "nodes": [
49
+ {
50
+ "id": 2440,
51
+ "literals": [
52
+ "solidity",
53
+ "=",
54
+ "0.5",
55
+ ".16"
56
+ ],
57
+ "nodeType": "PragmaDirective",
58
+ "src": "0:24:10"
59
+ },
60
+ {
61
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/Collateral.sol",
62
+ "file": "./Collateral.sol",
63
+ "id": 2441,
64
+ "nodeType": "ImportDirective",
65
+ "scope": 2477,
66
+ "sourceUnit": 3369,
67
+ "src": "28:26:10",
68
+ "symbolAliases": [],
69
+ "unitAlias": ""
70
+ },
71
+ {
72
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/ICDeployer.sol",
73
+ "file": "./interfaces/ICDeployer.sol",
74
+ "id": 2442,
75
+ "nodeType": "ImportDirective",
76
+ "scope": 2477,
77
+ "sourceUnit": 5434,
78
+ "src": "56:37:10",
79
+ "symbolAliases": [],
80
+ "unitAlias": ""
81
+ },
82
+ {
83
+ "baseContracts": [
84
+ {
85
+ "arguments": null,
86
+ "baseName": {
87
+ "contractScope": null,
88
+ "id": 2443,
89
+ "name": "ICDeployer",
90
+ "nodeType": "UserDefinedTypeName",
91
+ "referencedDeclaration": 5433,
92
+ "src": "253:10:10",
93
+ "typeDescriptions": {
94
+ "typeIdentifier": "t_contract$_ICDeployer_$5433",
95
+ "typeString": "contract ICDeployer"
96
+ }
97
+ },
98
+ "id": 2444,
99
+ "nodeType": "InheritanceSpecifier",
100
+ "src": "253:10:10"
101
+ }
102
+ ],
103
+ "contractDependencies": [
104
+ 3368,
105
+ 5433
106
+ ],
107
+ "contractKind": "contract",
108
+ "documentation": null,
109
+ "fullyImplemented": true,
110
+ "id": 2476,
111
+ "linearizedBaseContracts": [
112
+ 2476,
113
+ 5433
114
+ ],
115
+ "name": "CDeployer",
116
+ "nodeType": "ContractDefinition",
117
+ "nodes": [
118
+ {
119
+ "body": {
120
+ "id": 2447,
121
+ "nodeType": "Block",
122
+ "src": "290:2:10",
123
+ "statements": []
124
+ },
125
+ "documentation": null,
126
+ "id": 2448,
127
+ "implemented": true,
128
+ "kind": "constructor",
129
+ "modifiers": [],
130
+ "name": "",
131
+ "nodeType": "FunctionDefinition",
132
+ "parameters": {
133
+ "id": 2445,
134
+ "nodeType": "ParameterList",
135
+ "parameters": [],
136
+ "src": "280:2:10"
137
+ },
138
+ "returnParameters": {
139
+ "id": 2446,
140
+ "nodeType": "ParameterList",
141
+ "parameters": [],
142
+ "src": "290:0:10"
143
+ },
144
+ "scope": 2476,
145
+ "src": "268:24:10",
146
+ "stateMutability": "nonpayable",
147
+ "superFunction": null,
148
+ "visibility": "public"
149
+ },
150
+ {
151
+ "body": {
152
+ "id": 2474,
153
+ "nodeType": "Block",
154
+ "src": "385:227:10",
155
+ "statements": [
156
+ {
157
+ "assignments": [
158
+ 2456
159
+ ],
160
+ "declarations": [
161
+ {
162
+ "constant": false,
163
+ "id": 2456,
164
+ "name": "bytecode",
165
+ "nodeType": "VariableDeclaration",
166
+ "scope": 2474,
167
+ "src": "390:21:10",
168
+ "stateVariable": false,
169
+ "storageLocation": "memory",
170
+ "typeDescriptions": {
171
+ "typeIdentifier": "t_bytes_memory_ptr",
172
+ "typeString": "bytes"
173
+ },
174
+ "typeName": {
175
+ "id": 2455,
176
+ "name": "bytes",
177
+ "nodeType": "ElementaryTypeName",
178
+ "src": "390:5:10",
179
+ "typeDescriptions": {
180
+ "typeIdentifier": "t_bytes_storage_ptr",
181
+ "typeString": "bytes"
182
+ }
183
+ },
184
+ "value": null,
185
+ "visibility": "internal"
186
+ }
187
+ ],
188
+ "id": 2461,
189
+ "initialValue": {
190
+ "argumentTypes": null,
191
+ "expression": {
192
+ "argumentTypes": null,
193
+ "arguments": [
194
+ {
195
+ "argumentTypes": null,
196
+ "id": 2458,
197
+ "name": "Collateral",
198
+ "nodeType": "Identifier",
199
+ "overloadedDeclarations": [],
200
+ "referencedDeclaration": 3368,
201
+ "src": "419:10:10",
202
+ "typeDescriptions": {
203
+ "typeIdentifier": "t_type$_t_contract$_Collateral_$3368_$",
204
+ "typeString": "type(contract Collateral)"
205
+ }
206
+ }
207
+ ],
208
+ "expression": {
209
+ "argumentTypes": [
210
+ {
211
+ "typeIdentifier": "t_type$_t_contract$_Collateral_$3368_$",
212
+ "typeString": "type(contract Collateral)"
213
+ }
214
+ ],
215
+ "id": 2457,
216
+ "name": "type",
217
+ "nodeType": "Identifier",
218
+ "overloadedDeclarations": [],
219
+ "referencedDeclaration": 9831,
220
+ "src": "414:4:10",
221
+ "typeDescriptions": {
222
+ "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
223
+ "typeString": "function (address) pure"
224
+ }
225
+ },
226
+ "id": 2459,
227
+ "isConstant": false,
228
+ "isLValue": false,
229
+ "isPure": true,
230
+ "kind": "functionCall",
231
+ "lValueRequested": false,
232
+ "names": [],
233
+ "nodeType": "FunctionCall",
234
+ "src": "414:16:10",
235
+ "typeDescriptions": {
236
+ "typeIdentifier": "t_magic_meta_type_t_contract$_Collateral_$3368",
237
+ "typeString": "type(contract Collateral)"
238
+ }
239
+ },
240
+ "id": 2460,
241
+ "isConstant": false,
242
+ "isLValue": false,
243
+ "isPure": true,
244
+ "lValueRequested": false,
245
+ "memberName": "creationCode",
246
+ "nodeType": "MemberAccess",
247
+ "referencedDeclaration": null,
248
+ "src": "414:29:10",
249
+ "typeDescriptions": {
250
+ "typeIdentifier": "t_bytes_memory_ptr",
251
+ "typeString": "bytes memory"
252
+ }
253
+ },
254
+ "nodeType": "VariableDeclarationStatement",
255
+ "src": "390:53:10"
256
+ },
257
+ {
258
+ "assignments": [
259
+ 2463
260
+ ],
261
+ "declarations": [
262
+ {
263
+ "constant": false,
264
+ "id": 2463,
265
+ "name": "salt",
266
+ "nodeType": "VariableDeclaration",
267
+ "scope": 2474,
268
+ "src": "448:12:10",
269
+ "stateVariable": false,
270
+ "storageLocation": "default",
271
+ "typeDescriptions": {
272
+ "typeIdentifier": "t_bytes32",
273
+ "typeString": "bytes32"
274
+ },
275
+ "typeName": {
276
+ "id": 2462,
277
+ "name": "bytes32",
278
+ "nodeType": "ElementaryTypeName",
279
+ "src": "448:7:10",
280
+ "typeDescriptions": {
281
+ "typeIdentifier": "t_bytes32",
282
+ "typeString": "bytes32"
283
+ }
284
+ },
285
+ "value": null,
286
+ "visibility": "internal"
287
+ }
288
+ ],
289
+ "id": 2472,
290
+ "initialValue": {
291
+ "argumentTypes": null,
292
+ "arguments": [
293
+ {
294
+ "argumentTypes": null,
295
+ "arguments": [
296
+ {
297
+ "argumentTypes": null,
298
+ "expression": {
299
+ "argumentTypes": null,
300
+ "id": 2467,
301
+ "name": "msg",
302
+ "nodeType": "Identifier",
303
+ "overloadedDeclarations": [],
304
+ "referencedDeclaration": 9818,
305
+ "src": "490:3:10",
306
+ "typeDescriptions": {
307
+ "typeIdentifier": "t_magic_message",
308
+ "typeString": "msg"
309
+ }
310
+ },
311
+ "id": 2468,
312
+ "isConstant": false,
313
+ "isLValue": false,
314
+ "isPure": false,
315
+ "lValueRequested": false,
316
+ "memberName": "sender",
317
+ "nodeType": "MemberAccess",
318
+ "referencedDeclaration": null,
319
+ "src": "490:10:10",
320
+ "typeDescriptions": {
321
+ "typeIdentifier": "t_address_payable",
322
+ "typeString": "address payable"
323
+ }
324
+ },
325
+ {
326
+ "argumentTypes": null,
327
+ "id": 2469,
328
+ "name": "uniswapV2Pair",
329
+ "nodeType": "Identifier",
330
+ "overloadedDeclarations": [],
331
+ "referencedDeclaration": 2450,
332
+ "src": "502:13:10",
333
+ "typeDescriptions": {
334
+ "typeIdentifier": "t_address",
335
+ "typeString": "address"
336
+ }
337
+ }
338
+ ],
339
+ "expression": {
340
+ "argumentTypes": [
341
+ {
342
+ "typeIdentifier": "t_address_payable",
343
+ "typeString": "address payable"
344
+ },
345
+ {
346
+ "typeIdentifier": "t_address",
347
+ "typeString": "address"
348
+ }
349
+ ],
350
+ "expression": {
351
+ "argumentTypes": null,
352
+ "id": 2465,
353
+ "name": "abi",
354
+ "nodeType": "Identifier",
355
+ "overloadedDeclarations": [],
356
+ "referencedDeclaration": 9805,
357
+ "src": "473:3:10",
358
+ "typeDescriptions": {
359
+ "typeIdentifier": "t_magic_abi",
360
+ "typeString": "abi"
361
+ }
362
+ },
363
+ "id": 2466,
364
+ "isConstant": false,
365
+ "isLValue": false,
366
+ "isPure": true,
367
+ "lValueRequested": false,
368
+ "memberName": "encodePacked",
369
+ "nodeType": "MemberAccess",
370
+ "referencedDeclaration": null,
371
+ "src": "473:16:10",
372
+ "typeDescriptions": {
373
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
374
+ "typeString": "function () pure returns (bytes memory)"
375
+ }
376
+ },
377
+ "id": 2470,
378
+ "isConstant": false,
379
+ "isLValue": false,
380
+ "isPure": false,
381
+ "kind": "functionCall",
382
+ "lValueRequested": false,
383
+ "names": [],
384
+ "nodeType": "FunctionCall",
385
+ "src": "473:43:10",
386
+ "typeDescriptions": {
387
+ "typeIdentifier": "t_bytes_memory_ptr",
388
+ "typeString": "bytes memory"
389
+ }
390
+ }
391
+ ],
392
+ "expression": {
393
+ "argumentTypes": [
394
+ {
395
+ "typeIdentifier": "t_bytes_memory_ptr",
396
+ "typeString": "bytes memory"
397
+ }
398
+ ],
399
+ "id": 2464,
400
+ "name": "keccak256",
401
+ "nodeType": "Identifier",
402
+ "overloadedDeclarations": [],
403
+ "referencedDeclaration": 9812,
404
+ "src": "463:9:10",
405
+ "typeDescriptions": {
406
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
407
+ "typeString": "function (bytes memory) pure returns (bytes32)"
408
+ }
409
+ },
410
+ "id": 2471,
411
+ "isConstant": false,
412
+ "isLValue": false,
413
+ "isPure": false,
414
+ "kind": "functionCall",
415
+ "lValueRequested": false,
416
+ "names": [],
417
+ "nodeType": "FunctionCall",
418
+ "src": "463:54:10",
419
+ "typeDescriptions": {
420
+ "typeIdentifier": "t_bytes32",
421
+ "typeString": "bytes32"
422
+ }
423
+ },
424
+ "nodeType": "VariableDeclarationStatement",
425
+ "src": "448:69:10"
426
+ },
427
+ {
428
+ "externalReferences": [
429
+ {
430
+ "collateral": {
431
+ "declaration": 2453,
432
+ "isOffset": false,
433
+ "isSlot": false,
434
+ "src": "537:10:10",
435
+ "valueSize": 1
436
+ }
437
+ },
438
+ {
439
+ "bytecode": {
440
+ "declaration": 2456,
441
+ "isOffset": false,
442
+ "isSlot": false,
443
+ "src": "587:8:10",
444
+ "valueSize": 1
445
+ }
446
+ },
447
+ {
448
+ "bytecode": {
449
+ "declaration": 2456,
450
+ "isOffset": false,
451
+ "isSlot": false,
452
+ "src": "566:8:10",
453
+ "valueSize": 1
454
+ }
455
+ },
456
+ {
457
+ "salt": {
458
+ "declaration": 2463,
459
+ "isOffset": false,
460
+ "isSlot": false,
461
+ "src": "598:4:10",
462
+ "valueSize": 1
463
+ }
464
+ }
465
+ ],
466
+ "id": 2473,
467
+ "nodeType": "InlineAssembly",
468
+ "operations": "{\n collateral := create2(0, add(bytecode, 32), mload(bytecode), salt)\n}",
469
+ "src": "522:86:10"
470
+ }
471
+ ]
472
+ },
473
+ "documentation": null,
474
+ "id": 2475,
475
+ "implemented": true,
476
+ "kind": "function",
477
+ "modifiers": [],
478
+ "name": "deployCollateral",
479
+ "nodeType": "FunctionDefinition",
480
+ "parameters": {
481
+ "id": 2451,
482
+ "nodeType": "ParameterList",
483
+ "parameters": [
484
+ {
485
+ "constant": false,
486
+ "id": 2450,
487
+ "name": "uniswapV2Pair",
488
+ "nodeType": "VariableDeclaration",
489
+ "scope": 2475,
490
+ "src": "324:21:10",
491
+ "stateVariable": false,
492
+ "storageLocation": "default",
493
+ "typeDescriptions": {
494
+ "typeIdentifier": "t_address",
495
+ "typeString": "address"
496
+ },
497
+ "typeName": {
498
+ "id": 2449,
499
+ "name": "address",
500
+ "nodeType": "ElementaryTypeName",
501
+ "src": "324:7:10",
502
+ "stateMutability": "nonpayable",
503
+ "typeDescriptions": {
504
+ "typeIdentifier": "t_address",
505
+ "typeString": "address"
506
+ }
507
+ },
508
+ "value": null,
509
+ "visibility": "internal"
510
+ }
511
+ ],
512
+ "src": "323:23:10"
513
+ },
514
+ "returnParameters": {
515
+ "id": 2454,
516
+ "nodeType": "ParameterList",
517
+ "parameters": [
518
+ {
519
+ "constant": false,
520
+ "id": 2453,
521
+ "name": "collateral",
522
+ "nodeType": "VariableDeclaration",
523
+ "scope": 2475,
524
+ "src": "365:18:10",
525
+ "stateVariable": false,
526
+ "storageLocation": "default",
527
+ "typeDescriptions": {
528
+ "typeIdentifier": "t_address",
529
+ "typeString": "address"
530
+ },
531
+ "typeName": {
532
+ "id": 2452,
533
+ "name": "address",
534
+ "nodeType": "ElementaryTypeName",
535
+ "src": "365:7:10",
536
+ "stateMutability": "nonpayable",
537
+ "typeDescriptions": {
538
+ "typeIdentifier": "t_address",
539
+ "typeString": "address"
540
+ }
541
+ },
542
+ "value": null,
543
+ "visibility": "internal"
544
+ }
545
+ ],
546
+ "src": "364:20:10"
547
+ },
548
+ "scope": 2476,
549
+ "src": "298:314:10",
550
+ "stateMutability": "nonpayable",
551
+ "superFunction": 5432,
552
+ "visibility": "external"
553
+ }
554
+ ],
555
+ "scope": 2477,
556
+ "src": "231:384:10"
557
+ }
558
+ ],
559
+ "src": "0:615:10"
560
+ },
561
+ "legacyAST": {
562
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/CDeployer.sol",
563
+ "exportedSymbols": {
564
+ "CDeployer": [
565
+ 2476
566
+ ]
567
+ },
568
+ "id": 2477,
569
+ "nodeType": "SourceUnit",
570
+ "nodes": [
571
+ {
572
+ "id": 2440,
573
+ "literals": [
574
+ "solidity",
575
+ "=",
576
+ "0.5",
577
+ ".16"
578
+ ],
579
+ "nodeType": "PragmaDirective",
580
+ "src": "0:24:10"
581
+ },
582
+ {
583
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/Collateral.sol",
584
+ "file": "./Collateral.sol",
585
+ "id": 2441,
586
+ "nodeType": "ImportDirective",
587
+ "scope": 2477,
588
+ "sourceUnit": 3369,
589
+ "src": "28:26:10",
590
+ "symbolAliases": [],
591
+ "unitAlias": ""
592
+ },
593
+ {
594
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/ICDeployer.sol",
595
+ "file": "./interfaces/ICDeployer.sol",
596
+ "id": 2442,
597
+ "nodeType": "ImportDirective",
598
+ "scope": 2477,
599
+ "sourceUnit": 5434,
600
+ "src": "56:37:10",
601
+ "symbolAliases": [],
602
+ "unitAlias": ""
603
+ },
604
+ {
605
+ "baseContracts": [
606
+ {
607
+ "arguments": null,
608
+ "baseName": {
609
+ "contractScope": null,
610
+ "id": 2443,
611
+ "name": "ICDeployer",
612
+ "nodeType": "UserDefinedTypeName",
613
+ "referencedDeclaration": 5433,
614
+ "src": "253:10:10",
615
+ "typeDescriptions": {
616
+ "typeIdentifier": "t_contract$_ICDeployer_$5433",
617
+ "typeString": "contract ICDeployer"
618
+ }
619
+ },
620
+ "id": 2444,
621
+ "nodeType": "InheritanceSpecifier",
622
+ "src": "253:10:10"
623
+ }
624
+ ],
625
+ "contractDependencies": [
626
+ 3368,
627
+ 5433
628
+ ],
629
+ "contractKind": "contract",
630
+ "documentation": null,
631
+ "fullyImplemented": true,
632
+ "id": 2476,
633
+ "linearizedBaseContracts": [
634
+ 2476,
635
+ 5433
636
+ ],
637
+ "name": "CDeployer",
638
+ "nodeType": "ContractDefinition",
639
+ "nodes": [
640
+ {
641
+ "body": {
642
+ "id": 2447,
643
+ "nodeType": "Block",
644
+ "src": "290:2:10",
645
+ "statements": []
646
+ },
647
+ "documentation": null,
648
+ "id": 2448,
649
+ "implemented": true,
650
+ "kind": "constructor",
651
+ "modifiers": [],
652
+ "name": "",
653
+ "nodeType": "FunctionDefinition",
654
+ "parameters": {
655
+ "id": 2445,
656
+ "nodeType": "ParameterList",
657
+ "parameters": [],
658
+ "src": "280:2:10"
659
+ },
660
+ "returnParameters": {
661
+ "id": 2446,
662
+ "nodeType": "ParameterList",
663
+ "parameters": [],
664
+ "src": "290:0:10"
665
+ },
666
+ "scope": 2476,
667
+ "src": "268:24:10",
668
+ "stateMutability": "nonpayable",
669
+ "superFunction": null,
670
+ "visibility": "public"
671
+ },
672
+ {
673
+ "body": {
674
+ "id": 2474,
675
+ "nodeType": "Block",
676
+ "src": "385:227:10",
677
+ "statements": [
678
+ {
679
+ "assignments": [
680
+ 2456
681
+ ],
682
+ "declarations": [
683
+ {
684
+ "constant": false,
685
+ "id": 2456,
686
+ "name": "bytecode",
687
+ "nodeType": "VariableDeclaration",
688
+ "scope": 2474,
689
+ "src": "390:21:10",
690
+ "stateVariable": false,
691
+ "storageLocation": "memory",
692
+ "typeDescriptions": {
693
+ "typeIdentifier": "t_bytes_memory_ptr",
694
+ "typeString": "bytes"
695
+ },
696
+ "typeName": {
697
+ "id": 2455,
698
+ "name": "bytes",
699
+ "nodeType": "ElementaryTypeName",
700
+ "src": "390:5:10",
701
+ "typeDescriptions": {
702
+ "typeIdentifier": "t_bytes_storage_ptr",
703
+ "typeString": "bytes"
704
+ }
705
+ },
706
+ "value": null,
707
+ "visibility": "internal"
708
+ }
709
+ ],
710
+ "id": 2461,
711
+ "initialValue": {
712
+ "argumentTypes": null,
713
+ "expression": {
714
+ "argumentTypes": null,
715
+ "arguments": [
716
+ {
717
+ "argumentTypes": null,
718
+ "id": 2458,
719
+ "name": "Collateral",
720
+ "nodeType": "Identifier",
721
+ "overloadedDeclarations": [],
722
+ "referencedDeclaration": 3368,
723
+ "src": "419:10:10",
724
+ "typeDescriptions": {
725
+ "typeIdentifier": "t_type$_t_contract$_Collateral_$3368_$",
726
+ "typeString": "type(contract Collateral)"
727
+ }
728
+ }
729
+ ],
730
+ "expression": {
731
+ "argumentTypes": [
732
+ {
733
+ "typeIdentifier": "t_type$_t_contract$_Collateral_$3368_$",
734
+ "typeString": "type(contract Collateral)"
735
+ }
736
+ ],
737
+ "id": 2457,
738
+ "name": "type",
739
+ "nodeType": "Identifier",
740
+ "overloadedDeclarations": [],
741
+ "referencedDeclaration": 9831,
742
+ "src": "414:4:10",
743
+ "typeDescriptions": {
744
+ "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
745
+ "typeString": "function (address) pure"
746
+ }
747
+ },
748
+ "id": 2459,
749
+ "isConstant": false,
750
+ "isLValue": false,
751
+ "isPure": true,
752
+ "kind": "functionCall",
753
+ "lValueRequested": false,
754
+ "names": [],
755
+ "nodeType": "FunctionCall",
756
+ "src": "414:16:10",
757
+ "typeDescriptions": {
758
+ "typeIdentifier": "t_magic_meta_type_t_contract$_Collateral_$3368",
759
+ "typeString": "type(contract Collateral)"
760
+ }
761
+ },
762
+ "id": 2460,
763
+ "isConstant": false,
764
+ "isLValue": false,
765
+ "isPure": true,
766
+ "lValueRequested": false,
767
+ "memberName": "creationCode",
768
+ "nodeType": "MemberAccess",
769
+ "referencedDeclaration": null,
770
+ "src": "414:29:10",
771
+ "typeDescriptions": {
772
+ "typeIdentifier": "t_bytes_memory_ptr",
773
+ "typeString": "bytes memory"
774
+ }
775
+ },
776
+ "nodeType": "VariableDeclarationStatement",
777
+ "src": "390:53:10"
778
+ },
779
+ {
780
+ "assignments": [
781
+ 2463
782
+ ],
783
+ "declarations": [
784
+ {
785
+ "constant": false,
786
+ "id": 2463,
787
+ "name": "salt",
788
+ "nodeType": "VariableDeclaration",
789
+ "scope": 2474,
790
+ "src": "448:12:10",
791
+ "stateVariable": false,
792
+ "storageLocation": "default",
793
+ "typeDescriptions": {
794
+ "typeIdentifier": "t_bytes32",
795
+ "typeString": "bytes32"
796
+ },
797
+ "typeName": {
798
+ "id": 2462,
799
+ "name": "bytes32",
800
+ "nodeType": "ElementaryTypeName",
801
+ "src": "448:7:10",
802
+ "typeDescriptions": {
803
+ "typeIdentifier": "t_bytes32",
804
+ "typeString": "bytes32"
805
+ }
806
+ },
807
+ "value": null,
808
+ "visibility": "internal"
809
+ }
810
+ ],
811
+ "id": 2472,
812
+ "initialValue": {
813
+ "argumentTypes": null,
814
+ "arguments": [
815
+ {
816
+ "argumentTypes": null,
817
+ "arguments": [
818
+ {
819
+ "argumentTypes": null,
820
+ "expression": {
821
+ "argumentTypes": null,
822
+ "id": 2467,
823
+ "name": "msg",
824
+ "nodeType": "Identifier",
825
+ "overloadedDeclarations": [],
826
+ "referencedDeclaration": 9818,
827
+ "src": "490:3:10",
828
+ "typeDescriptions": {
829
+ "typeIdentifier": "t_magic_message",
830
+ "typeString": "msg"
831
+ }
832
+ },
833
+ "id": 2468,
834
+ "isConstant": false,
835
+ "isLValue": false,
836
+ "isPure": false,
837
+ "lValueRequested": false,
838
+ "memberName": "sender",
839
+ "nodeType": "MemberAccess",
840
+ "referencedDeclaration": null,
841
+ "src": "490:10:10",
842
+ "typeDescriptions": {
843
+ "typeIdentifier": "t_address_payable",
844
+ "typeString": "address payable"
845
+ }
846
+ },
847
+ {
848
+ "argumentTypes": null,
849
+ "id": 2469,
850
+ "name": "uniswapV2Pair",
851
+ "nodeType": "Identifier",
852
+ "overloadedDeclarations": [],
853
+ "referencedDeclaration": 2450,
854
+ "src": "502:13:10",
855
+ "typeDescriptions": {
856
+ "typeIdentifier": "t_address",
857
+ "typeString": "address"
858
+ }
859
+ }
860
+ ],
861
+ "expression": {
862
+ "argumentTypes": [
863
+ {
864
+ "typeIdentifier": "t_address_payable",
865
+ "typeString": "address payable"
866
+ },
867
+ {
868
+ "typeIdentifier": "t_address",
869
+ "typeString": "address"
870
+ }
871
+ ],
872
+ "expression": {
873
+ "argumentTypes": null,
874
+ "id": 2465,
875
+ "name": "abi",
876
+ "nodeType": "Identifier",
877
+ "overloadedDeclarations": [],
878
+ "referencedDeclaration": 9805,
879
+ "src": "473:3:10",
880
+ "typeDescriptions": {
881
+ "typeIdentifier": "t_magic_abi",
882
+ "typeString": "abi"
883
+ }
884
+ },
885
+ "id": 2466,
886
+ "isConstant": false,
887
+ "isLValue": false,
888
+ "isPure": true,
889
+ "lValueRequested": false,
890
+ "memberName": "encodePacked",
891
+ "nodeType": "MemberAccess",
892
+ "referencedDeclaration": null,
893
+ "src": "473:16:10",
894
+ "typeDescriptions": {
895
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
896
+ "typeString": "function () pure returns (bytes memory)"
897
+ }
898
+ },
899
+ "id": 2470,
900
+ "isConstant": false,
901
+ "isLValue": false,
902
+ "isPure": false,
903
+ "kind": "functionCall",
904
+ "lValueRequested": false,
905
+ "names": [],
906
+ "nodeType": "FunctionCall",
907
+ "src": "473:43:10",
908
+ "typeDescriptions": {
909
+ "typeIdentifier": "t_bytes_memory_ptr",
910
+ "typeString": "bytes memory"
911
+ }
912
+ }
913
+ ],
914
+ "expression": {
915
+ "argumentTypes": [
916
+ {
917
+ "typeIdentifier": "t_bytes_memory_ptr",
918
+ "typeString": "bytes memory"
919
+ }
920
+ ],
921
+ "id": 2464,
922
+ "name": "keccak256",
923
+ "nodeType": "Identifier",
924
+ "overloadedDeclarations": [],
925
+ "referencedDeclaration": 9812,
926
+ "src": "463:9:10",
927
+ "typeDescriptions": {
928
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
929
+ "typeString": "function (bytes memory) pure returns (bytes32)"
930
+ }
931
+ },
932
+ "id": 2471,
933
+ "isConstant": false,
934
+ "isLValue": false,
935
+ "isPure": false,
936
+ "kind": "functionCall",
937
+ "lValueRequested": false,
938
+ "names": [],
939
+ "nodeType": "FunctionCall",
940
+ "src": "463:54:10",
941
+ "typeDescriptions": {
942
+ "typeIdentifier": "t_bytes32",
943
+ "typeString": "bytes32"
944
+ }
945
+ },
946
+ "nodeType": "VariableDeclarationStatement",
947
+ "src": "448:69:10"
948
+ },
949
+ {
950
+ "externalReferences": [
951
+ {
952
+ "collateral": {
953
+ "declaration": 2453,
954
+ "isOffset": false,
955
+ "isSlot": false,
956
+ "src": "537:10:10",
957
+ "valueSize": 1
958
+ }
959
+ },
960
+ {
961
+ "bytecode": {
962
+ "declaration": 2456,
963
+ "isOffset": false,
964
+ "isSlot": false,
965
+ "src": "587:8:10",
966
+ "valueSize": 1
967
+ }
968
+ },
969
+ {
970
+ "bytecode": {
971
+ "declaration": 2456,
972
+ "isOffset": false,
973
+ "isSlot": false,
974
+ "src": "566:8:10",
975
+ "valueSize": 1
976
+ }
977
+ },
978
+ {
979
+ "salt": {
980
+ "declaration": 2463,
981
+ "isOffset": false,
982
+ "isSlot": false,
983
+ "src": "598:4:10",
984
+ "valueSize": 1
985
+ }
986
+ }
987
+ ],
988
+ "id": 2473,
989
+ "nodeType": "InlineAssembly",
990
+ "operations": "{\n collateral := create2(0, add(bytecode, 32), mload(bytecode), salt)\n}",
991
+ "src": "522:86:10"
992
+ }
993
+ ]
994
+ },
995
+ "documentation": null,
996
+ "id": 2475,
997
+ "implemented": true,
998
+ "kind": "function",
999
+ "modifiers": [],
1000
+ "name": "deployCollateral",
1001
+ "nodeType": "FunctionDefinition",
1002
+ "parameters": {
1003
+ "id": 2451,
1004
+ "nodeType": "ParameterList",
1005
+ "parameters": [
1006
+ {
1007
+ "constant": false,
1008
+ "id": 2450,
1009
+ "name": "uniswapV2Pair",
1010
+ "nodeType": "VariableDeclaration",
1011
+ "scope": 2475,
1012
+ "src": "324:21:10",
1013
+ "stateVariable": false,
1014
+ "storageLocation": "default",
1015
+ "typeDescriptions": {
1016
+ "typeIdentifier": "t_address",
1017
+ "typeString": "address"
1018
+ },
1019
+ "typeName": {
1020
+ "id": 2449,
1021
+ "name": "address",
1022
+ "nodeType": "ElementaryTypeName",
1023
+ "src": "324:7:10",
1024
+ "stateMutability": "nonpayable",
1025
+ "typeDescriptions": {
1026
+ "typeIdentifier": "t_address",
1027
+ "typeString": "address"
1028
+ }
1029
+ },
1030
+ "value": null,
1031
+ "visibility": "internal"
1032
+ }
1033
+ ],
1034
+ "src": "323:23:10"
1035
+ },
1036
+ "returnParameters": {
1037
+ "id": 2454,
1038
+ "nodeType": "ParameterList",
1039
+ "parameters": [
1040
+ {
1041
+ "constant": false,
1042
+ "id": 2453,
1043
+ "name": "collateral",
1044
+ "nodeType": "VariableDeclaration",
1045
+ "scope": 2475,
1046
+ "src": "365:18:10",
1047
+ "stateVariable": false,
1048
+ "storageLocation": "default",
1049
+ "typeDescriptions": {
1050
+ "typeIdentifier": "t_address",
1051
+ "typeString": "address"
1052
+ },
1053
+ "typeName": {
1054
+ "id": 2452,
1055
+ "name": "address",
1056
+ "nodeType": "ElementaryTypeName",
1057
+ "src": "365:7:10",
1058
+ "stateMutability": "nonpayable",
1059
+ "typeDescriptions": {
1060
+ "typeIdentifier": "t_address",
1061
+ "typeString": "address"
1062
+ }
1063
+ },
1064
+ "value": null,
1065
+ "visibility": "internal"
1066
+ }
1067
+ ],
1068
+ "src": "364:20:10"
1069
+ },
1070
+ "scope": 2476,
1071
+ "src": "298:314:10",
1072
+ "stateMutability": "nonpayable",
1073
+ "superFunction": 5432,
1074
+ "visibility": "external"
1075
+ }
1076
+ ],
1077
+ "scope": 2477,
1078
+ "src": "231:384:10"
1079
+ }
1080
+ ],
1081
+ "src": "0:615:10"
1082
+ },
1083
+ "compiler": {
1084
+ "name": "solc",
1085
+ "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
1086
+ },
1087
+ "networks": {
1088
+ "3": {
1089
+ "events": {},
1090
+ "links": {},
1091
+ "address": "0x7F90cf70e904a8C6443E0dA5181C5cD6EaBd6CB1",
1092
+ "transactionHash": "0xee0b9a1f091fd32045b330e53dca8c0a9dd60af9254a75d6dabdaa3425e6d6d4"
1093
+ }
1094
+ },
1095
+ "schemaVersion": "3.3.2",
1096
+ "updatedAt": "2021-01-09T21:19:45.620Z",
1097
+ "networkType": "ethereum",
1098
+ "devdoc": {
1099
+ "methods": {}
1100
+ },
1101
+ "userdoc": {
1102
+ "methods": {}
1103
+ }
1104
+ }