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,1195 @@
1
+ {
2
+ "contractName": "BDeployer",
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
+ "internalType": "uint8",
20
+ "name": "index",
21
+ "type": "uint8"
22
+ }
23
+ ],
24
+ "name": "deployBorrowable",
25
+ "outputs": [
26
+ {
27
+ "internalType": "address",
28
+ "name": "borrowable",
29
+ "type": "address"
30
+ }
31
+ ],
32
+ "payable": false,
33
+ "stateMutability": "nonpayable",
34
+ "type": "function"
35
+ }
36
+ ],
37
+ "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\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"name\":\"deployBorrowable\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"borrowable\",\"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/BDeployer.sol\":\"BDeployer\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BAllowance.sol\":{\"keccak256\":\"0x252d163e2ae3fb3e23ea8d01f817e06db79e7c39038bd0df24263a88b9e863f1\",\"urls\":[\"bzz-raw://d36c298ce777c8a91fd733e8fb880f11411b2dcb7d65090bdf181a7f03db6dd8\",\"dweb:/ipfs/QmXqhsMXcn1zanrJx6WSXCHyTtbiHAxCDwdscQqwhzgg7P\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BDeployer.sol\":{\"keccak256\":\"0x32d92dde3b375eb846fce576583d929db6e5547467fb812c17ad82120b14f4fc\",\"urls\":[\"bzz-raw://2447e27b6248e6307c572a30d8057b54a51523e0f3c5a4332439fcd12e4abe73\",\"dweb:/ipfs/QmQTsNvfE7GKi1H87X8X88GtSXwuiCTGbpQTRu35J4SZjR\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BInterestRateModel.sol\":{\"keccak256\":\"0x09883d11c8f6d2d410ff37978b238e3a44c88d8405b447173945032ba041db32\",\"urls\":[\"bzz-raw://db61f09acf2dbc74b34aeab92f99ca01feacba3d5829eb8f9dec3c2692f2ea10\",\"dweb:/ipfs/QmcUNLBJ7xk2ukwF3KdaSbse7iFPvjRgpoAWTXuDbqqAUC\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BSetter.sol\":{\"keccak256\":\"0xdc3d4fd0f057840c1e4db5ec18080e8060d53e38e7e39668a18b393d7e78dd2a\",\"urls\":[\"bzz-raw://a112ea85365b06ceff910de0f014a3ab277ad61eb35e52194b5f0d6dbaf9d016\",\"dweb:/ipfs/Qme2Jvvt2ocCuED4grVpU2Yc8PCZX8GLdGMboy1xmhpN6m\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BStorage.sol\":{\"keccak256\":\"0x3dd747da5b10f85b71ddd313996775044c87003d5877351531f2fe0f286355c9\",\"urls\":[\"bzz-raw://96c21f1c978495c0fb43c6d9b336af80ef6765104e19f85a6cc9b4e76360673a\",\"dweb:/ipfs/QmYjRk4ReG2DyKPmf4wR8cqDXCVSgTNtAs7MjYWhtdQ66K\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/Borrowable.sol\":{\"keccak256\":\"0x25e12f9a4c73be87019cdd952ac93b8894f4bb4c50a4c0fabb49177c36cf3418\",\"urls\":[\"bzz-raw://d85c6b590ccf8e579eb2d16d60e457cbae1d989ead29d67d9380bf621b132d3c\",\"dweb:/ipfs/QmPhXciwbjs2E9JhnJS9UkDPpJWV4DGuYkczJZHP5b7Jvx\"]},\"/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/IBDeployer.sol\":{\"keccak256\":\"0x355a390f6ae04754647499879c85e4c7ef044e57b8cf7e1abd7fe3151b137941\",\"urls\":[\"bzz-raw://f9c26d8987afac1db2b0885af8012ee9690e372e31ab5c1584ec2cbf7b26e915\",\"dweb:/ipfs/QmNyjWKPymsDrYNptQ1D6PQwVWmWW5rp4m73QsUocnnym3\"]},\"/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IBorrowTracker.sol\":{\"keccak256\":\"0xc2ddd380effc1179ff0ca88f4733113ff8ab9b7317e75483df57abc2f4dfab0b\",\"urls\":[\"bzz-raw://3bde59cee4b505dc0ed83cc67e6a26a530b08dfe02bdaf9a8da096576a630ff5\",\"dweb:/ipfs/QmNdnZBVo4eWPirmUU8AhoC5adUbS2xferbeBi1AZkaLtW\"]},\"/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/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/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\"]}},\"version\":1}",
38
+ "bytecode": "0x608060405234801561001057600080fd5b50615bc7806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806354bcd7ad14610030575b600080fd5b61007f6004803603604081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506100c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006060604051806020016100d5906101a1565b6020820181038252601f19601f8201166040525090506000338585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018260ff1660ff1660f81b81526001019350505050604051602081830303815290604052805190602001209050808251602084016000f59250505092915050565b6159e4806101af8339019056fe60806040526012600260006101000a81548160ff021916908360ff1602179055506001600b60006101000a81548160ff021916908315150217905550670de0b6b3a7640000600e60006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555064010000000042816200008757fe5b06600e601c6101000a81548163ffffffff021916908363ffffffff160217905550635e80a6c0601060066101000a81548165ffffffffffff021916908365ffffffffffff1602179055506401000000004281620000e057fe5b066010600c6101000a81548163ffffffff021916908363ffffffff16021790555067016345785d8a00006011556709b6e64a8ec600006012556486bd6db0206013553480156200012f57600080fd5b506158a480620001406000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c806370a08231116101e9578063b7f1118a1161010f578063c914b437116100ad578063e07660001161007c578063e07660001461126d578063e12b63061461128b578063fca7820b146112b5578063fff6cae9146112e357610399565b8063c914b437146110e4578063d505accf14611112578063d8dfeb45146111ab578063dd62ed3e146111f557610399565b8063bc25cf77116100e9578063bc25cf771461101a578063be340e321461105e578063c45a01551461107c578063c72f3fbb146110c657610399565b8063b7f1118a14610f8e578063b95b92a314610fd2578063ba9a7a5614610ffc57610399565b806395a2251f11610187578063a6afed9511610156578063a6afed9514610ec2578063a9059cbb14610ecc578063aa5af0fd14610f32578063ad7a672f14610f7057610399565b806395a2251f14610d3057806395d89b4114610d885780639e79b55c14610e0b578063a071571914610ea457610399565b806386b9d81f116101c357806386b9d81f14610bf657806391b4274514610c6e578063926d845b14610c9c5780639292b03214610d0257610399565b806370a0823114610b1c578063796b89b914610b745780637ecebe0014610b9e57610399565b806335542822116102ce5780634d73e9ba1161026c5780636a030c111161023b5780636a030c11146108f45780636a62784214610a025780636bd76d2414610a5a5780636f307dc314610ad257610399565b80634d73e9ba14610816578063559572201461086e5780635b2b9d1a146108b857806368544065146108d657610399565b80634322b714116102a85780634322b71414610792578063452ae95f146107b057806347bd3718146107ce5780634a5d316c1461080c57610399565b806335542822146107125780633644e515146107565780633ba0b9a91461077457610399565b80632374e8a91161033b57806327549a0b1161031557806327549a0b146106845780632d5231d3146106b257806330adf81f146106d0578063313ce567146106ee57610399565b80632374e8a9146105c257806323b872dd146105e0578063253c24f31461066657610399565b8063095ea7b311610377578063095ea7b31461045d57806318160ddd146104c35780631aebf12f146104e15780631e7dcc0d146104ff57610399565b806301f8c1c81461039e57806306fdde03146103bc578063075f4e7f1461043f575b600080fd5b6103a66112ed565b6040518082815260200191505060405180910390f35b6103c4611314565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104045780820151818401526020810190506103e9565b50505050905090810190601f1680156104315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104476113b2565b6040518082815260200191505060405180910390f35b6104a96004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113bb565b604051808215151515815260200191505060405180910390f35b6104cb6113d2565b6040518082815260200191505060405180910390f35b6104e96113d8565b6040518082815260200191505060405180910390f35b6105c06004803603608081101561051557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561057c57600080fd5b82018360208201111561058e57600080fd5b803590602001918460018302840111640100000000831117156105b057600080fd5b90919293919293905050506113de565b005b6105ca611a00565b6040518082815260200191505060405180910390f35b61064c600480360360608110156105f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a0c565b604051808215151515815260200191505060405180910390f35b61066e611c0e565b6040518082815260200191505060405180910390f35b6106b06004803603602081101561069a57600080fd5b8101908080359060200190929190505050611c18565b005b6106ba611d27565b6040518082815260200191505060405180910390f35b6106d8611d2d565b6040518082815260200191505060405180910390f35b6106f6611d54565b604051808260ff1660ff16815260200191505060405180910390f35b6107546004803603602081101561072857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d67565b005b61075e611ece565b6040518082815260200191505060405180910390f35b61077c611ed4565b6040518082815260200191505060405180910390f35b61079a611f93565b6040518082815260200191505060405180910390f35b6107b8611f99565b6040518082815260200191505060405180910390f35b6107d6611fa2565b60405180826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200191505060405180910390f35b610814611fc1565b005b6108586004803603602081101561082c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c8565b6040518082815260200191505060405180910390f35b61087661224f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c0612275565b6040518082815260200191505060405180910390f35b6108de61227a565b6040518082815260200191505060405180910390f35b610a006004803603608081101561090a57600080fd5b810190808035906020019064010000000081111561092757600080fd5b82018360208201111561093957600080fd5b8035906020019184600183028401116401000000008311171561095b57600080fd5b90919293919293908035906020019064010000000081111561097c57600080fd5b82018360208201111561098e57600080fd5b803590602001918460018302840111640100000000831117156109b057600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612286565b005b610a4460048036036020811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612474565b6040518082815260200191505060405180910390f35b610abc60048036036040811015610a7057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612787565b6040518082815260200191505060405180910390f35b610ada6127ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b5e60048036036020811015610b3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d2565b6040518082815260200191505060405180910390f35b610b7c6127ea565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b610be060048036036020811015610bb457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612800565b6040518082815260200191505060405180910390f35b610c5860048036036040811015610c0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612818565b6040518082815260200191505060405180910390f35b610c76612bc8565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b610ce860048036036040811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612be0565b604051808215151515815260200191505060405180910390f35b610d2e60048036036020811015610d1857600080fd5b8101908080359060200190929190505050612bf7565b005b610d7260048036036020811015610d4657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d0b565b6040518082815260200191505060405180910390f35b610d90612fbc565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dd0578082015181840152602081019050610db5565b50505050905090810190601f168015610dfd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ea2600480360360e0811015610e2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061305a565b005b610eac6130a1565b6040518082815260200191505060405180910390f35b610eca6130ac565b005b610f1860048036036040811015610ee257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132ff565b604051808215151515815260200191505060405180910390f35b610f3a613316565b60405180826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f78613336565b6040518082815260200191505060405180910390f35b610fd060048036036020811015610fa457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061333c565b005b610fda61337e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b611004613394565b6040518082815260200191505060405180910390f35b61105c6004803603602081101561103057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061339a565b005b61106661354c565b6040518082815260200191505060405180910390f35b611084613552565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110ce613578565b6040518082815260200191505060405180910390f35b6110ec613584565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6111a9600480360360e081101561112857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061359c565b005b6111b36135e3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6112576004803603604081101561120b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613609565b6040518082815260200191505060405180910390f35b61127561362e565b6040518082815260200191505060405180910390f35b611293613636565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b6112e1600480360360208110156112cb57600080fd5b810190808035906020019092919050505061364c565b005b6112eb613759565b005b7ff6d86ed606f871fa1a557ac0ba607adce07767acf53f492fb215a1a4db4aea6f60001b81565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113aa5780601f1061137f576101008083540402835291602001916113aa565b820191906000526020600020905b81548152906001019060200180831161138d57829003601f168201915b505050505081565b640d7957c4d081565b60006113c8338484613823565b6001905092915050565b60035481565b60125481565b600b60009054906101000a900460ff16611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506114836130ac565b6000600a54905080841115611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b61150b86338661390e565b600084111561151f5761151e8585613af0565b5b6000838390501115611633578473ffffffffffffffffffffffffffffffffffffffff1663876d9d9e33888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561161a57600080fd5b505af115801561162e573d6000803e3d6000fd5b505050505b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b810190808051906020019092919050505090506000611747670de0b6b3a764000061173966038d7ea4c6800089613d5e90919063ffffffff16565b613de490919063ffffffff16565b9050600061175e8288613e2e90919063ffffffff16565b90506000611787856117798a87613e2e90919063ffffffff16565b613eb690919063ffffffff16565b905060008060006117998d8686613f00565b9250925092508385111561193257600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aac2c538e30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b8101908080519060200190929190505050611931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f496d7065726d61783a20494e53554646494349454e545f4c495155494449545981525060200191505060405180910390fd5b5b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f33f3048bd4e6af45e53afb722adfd57dbde82da7e93e44db921fb4b8c6a70c4b8e88888888604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a450505050505050506119de6142af565b6001600b60006101000a81548160ff0219169083151502179055505050505050565b670853a0d2313c000081565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611bf857611b77826040518060400160405280601e81526020017f496d7065726d61783a205452414e534645525f4e4f545f414c4c4f5745440000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142c19092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611c03848484614381565b600190509392505050565b6505436648e14081565b600b60009054906101000a900460ff16611c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550611ccb81640d7957c4d06505436648e14061454c565b806013819055507f1396dfcdb64fb7eb77fb84966f27b81afe14aa70b6e966c68d74af3302a9fe90816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b60135481565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600260009054906101000a900460ff1681565b600b60009054906101000a900460ff16611de9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550611e0c614645565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f468b6598e7e810c65c9858b5f23a2d5b8692fb753b78a032232de4c6ed3cabbf81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b60065481565b6000611ede6130ac565b600060035490506000611f27600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600a54613e2e90919063ffffffff16565b90506000821480611f385750600081145b15611f4f57670de0b6b3a764000092505050611f90565b6000611f7e83611f70670de0b6b3a764000085613d5e90919063ffffffff16565b613de490919063ffffffff16565b9050611f8a818461478a565b93505050505b90565b60115481565b6407620d070081565b600e809054906101000a90046dffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496d7065726d61783a20464143544f52595f414c52454144595f53455400000081525060200191505060405180910390fd5b33600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120d261571d565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250509050600081602001516dffffffffffffffffffffffffffff1614156121cd57600091505061224a565b61224681602001516dffffffffffffffffffffffffffff16612238600e60009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1684600001516dffffffffffffffffffffffffffff16613d5e90919063ffffffff16565b613de490919063ffffffff16565b9150505b919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600581565b670c7d713b49da000081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b6123db86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061490f565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600f81905550505050505050565b6000600b60009054906101000a900460ff166124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b810190808051906020019092919050505090506000612608600a5483613eb690919063ffffffff16565b905061263e612615611ed4565b612630670de0b6b3a764000084613d5e90919063ffffffff16565b613de490919063ffffffff16565b925060006003541415612670576126606103e884613eb690919063ffffffff16565b925061266f60006103e8614a1b565b5b600083116126e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496d7065726d61783a204d494e545f414d4f554e545f5a45524f00000000000081525060200191505060405180910390fd5b6126f08484614a1b565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8386604051808381526020018281526020019250505060405180910390a350506127676142af565b6001600b60006101000a81548160ff021916908315150217905550919050565b600c602052816000526040600020602052806000526040600020600091509150505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b600064010000000042816127fa57fe5b06905090565b60076020528060005260406000206000915090505481565b6000600b60009054906101000a900460ff1661289c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506128bf6130ac565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561296057600080fd5b505afa158015612974573d6000803e3d6000fd5b505050506040513d602081101561298a57600080fd5b8101908080519060200190929190505050905060006129b4600a5483613eb690919063ffffffff16565b905060006129ca6129c4876120c8565b83614b35565b9050600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2a02ff18688846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612aa957600080fd5b505af1158015612abd573d6000803e3d6000fd5b505050506040513d6020811015612ad357600080fd5b810190808051906020019092919050505093506000806000612af789600087613f00565b9250925092508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb0dbe18c6ffdf0da655dd690e77211d379205c497be44c64447c3f5f021b51678a89888888604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a4505050505050612ba76142af565b6001600b60006101000a81548160ff02191690831515021790555092915050565b601060069054906101000a900465ffffffffffff1681565b6000612bed338484614b4e565b6001905092915050565b600b60009054906101000a900460ff16612c79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550612caf81670853a0d2313c0000670c7d713b49da000061454c565b806012819055507f7a550b1995ff63260fb313f12024e66e73bad425372e5af6b1e04cb3799ef38c816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900460ff16612d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e22670de0b6b3a7640000612e14612e05611ed4565b84613d5e90919063ffffffff16565b613de490919063ffffffff16565b915060008211612e9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a2052454445454d5f414d4f554e545f5a45524f0000000081525060200191505060405180910390fd5b600a54821115612f12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b612f1c8383613af0565b612f263082614c39565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8484604051808381526020018281526020019250505060405180910390a350612f9c6142af565b6001600b60006101000a81548160ff021916908315150217905550919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130525780601f1061302757610100808354040283529160200191613052565b820191906000526020600020905b81548152906001019060200180831161303557829003601f168201915b505050505081565b61308d878787878787877ff6d86ed606f871fa1a557ac0ba607adce07767acf53f492fb215a1a4db4aea6f60001b614d53565b613098878787614b4e565b50505050505050565b66038d7ea4c6800081565b6000600e60009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1690506000600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1690506000600e601c9054906101000a900463ffffffff169050600061312e6127ea565b90508063ffffffff168263ffffffff16141561314d57505050506132fd565b6000828203905081600e601c6101000a81548163ffffffff021916908363ffffffff16021790555060006131ac8263ffffffff16601060009054906101000a900465ffffffffffff1665ffffffffffff16613d5e90919063ffffffff16565b905060006131dd670de0b6b3a76400006131cf8885613d5e90919063ffffffff16565b613de490919063ffffffff16565b90506131f28187613e2e90919063ffffffff16565b9550613233613224670de0b6b3a76400006132168a86613d5e90919063ffffffff16565b613de490919063ffffffff16565b88613e2e90919063ffffffff16565b965061323e8761506a565b600e60006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555061327b8661506a565b600e806101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055507f875352fb3fadeb8c0be7cbbe8ff761b308fa7033470cd0287f02f3436fd76cb981888860405180848152602001838152602001828152602001935050505060405180910390a1505050505050505b565b600061330c338484614381565b6001905092915050565b600e60009054906101000a90046dffffffffffffffffffffffffffff1681565b600a5481565b61337b81613349836120c8565b600e60009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166150f8565b50565b600e601c9054906101000a900463ffffffff1681565b6103e881565b600b60009054906101000a900460ff1661341c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff02191690831515021790555061352e81613529600a54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134e057600080fd5b505afa1580156134f4573d6000803e3d6000fd5b505050506040513d602081101561350a57600080fd5b8101908080519060200190929190505050613eb690919063ffffffff16565b613af0565b6001600b60006101000a81548160ff02191690831515021790555050565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6702c68af0bb14000081565b601060009054906101000a900465ffffffffffff1681565b6135cf878787878787877f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b614d53565b6135da878787613823565b50505050505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052816000526040600020602052806000526040600020600091509150505481565b6312e687c081565b6010600c9054906101000a900463ffffffff1681565b600b60009054906101000a900460ff166136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506136fd8160006702c68af0bb14000061454c565b806011819055507f9d9cd27245b4e6b06dcf523ac57b6e851b934e199eee376313f906e94bfbfd55816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff166137db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506137fe6130ac565b6138066142af565b6001600b60006101000a81548160ff021916908315150217905550565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139eb57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b15613aea5781811015613a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a20424f52524f575f4e4f545f414c4c4f5745440000000081525060200191505060405180910390fd5b818103600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505050565b60006060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613c3f5780518252602082019150602081019050602083039250613c1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ca1576040519150601f19603f3d011682016040523d82523d6000602084013e613ca6565b606091505b5091509150818015613ce65750600081511480613ce55750808060200190516020811015613cd357600080fd5b81019080805190602001909291905050505b5b613d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a205452414e534645525f4641494c45440000000000000081525060200191505060405180910390fd5b50505050565b600080831415613d715760009050613dde565b6000828402905082848281613d8257fe5b0414613dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584f6021913960400191505060405180910390fd5b809150505b92915050565b6000613e2683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615208565b905092915050565b600080828401905083811015613eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000613ef883836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506142c1565b905092915050565b6000806000613f0e866120c8565b925083851415613f54578283600e809054906101000a90046dffffffffffffffffffffffffffff16806dffffffffffffffffffffffffffff1690509250925092506142a6565b6000600e60009054906101000a90046dffffffffffffffffffffffffffff169050848611156140d5576000600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008688039050613fda8187613e2e90919063ffffffff16565b9450613fe58561506a565b8260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055508282600001600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555061409081600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16613e2e90919063ffffffff16565b935061409b8461506a565b600e806101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050614289565b6000600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000878703905080861161412d576000614131565b8086035b945061413c8561506a565b8260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060008514156141b857600082600001600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506141f0565b8282600001600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505b60006142058688613eb690919063ffffffff16565b9050600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169450808511614243576000614247565b8085035b94506142528561506a565b600e806101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050505b6142a48784836dffffffffffffffffffffffffffff166150f8565b505b93509350939050565b6142b76152ce565b6142bf6153e9565b565b600083831115829061436e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614333578082015181840152602081019050614318565b50505050905090810190601f1680156143605780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b61440a816040518060400160405280601b81526020017f496d7065726d61783a205452414e534645525f544f4f5f484947480000000000815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142c19092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2e90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b614554614645565b818310156145ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b80831115614640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156146ad57600080fd5b505afa1580156146c1573d6000803e3d6000fd5b505050506040513d60208110156146d757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b565b600080600f549050808411156149045760006147ef6147e0670de0b6b3a76400006147d26011546147c4878b613eb690919063ffffffff16565b613d5e90919063ffffffff16565b613de490919063ffffffff16565b86613eb690919063ffffffff16565b9050600061482a8561481c8461480e8a8a613d5e90919063ffffffff16565b613de490919063ffffffff16565b613eb690919063ffffffff16565b9050600081141561484057859350505050614909565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663345ef9416040518163ffffffff1660e01b815260040160206040518083038186803b1580156148aa57600080fd5b505afa1580156148be573d6000803e3d6000fd5b505050506040513d60208110156148d457600080fd5b810190808051906020019092919050505090506148f18183614a1b565b82600f8190555082945050505050614909565b839150505b92915050565b8160009080519060200190614925929190615757565b50806001908051906020019061493c929190615757565b50600046905060405180806157fd605291396052019050604051809103902083805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120600681905550505050565b614a3081600354613e2e90919063ffffffff16565b600381905550614a8881600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2e90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000818310614b445781614b46565b825b905092915050565b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3c1215b41d54142382d54a05fb991007165ae91bcb1879bac8b290d9111aaf4836040518082815260200191505060405180910390a3505050565b614c8b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb690919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ce381600354613eb690919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b42851015614dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496d7065726d61783a204558504952454400000000000000000000000000000081525060200191505060405180910390fd5b6000600654828a8a8a600760008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614f78573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614fec57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61505e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e56414c49445f5349474e4154555245000000000081525060200191505060405180910390fd5b50505050505050505050565b60006e01000000000000000000000000000082106150f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496d7065726d61783a205341464531313200000000000000000000000000000081525060200191505060405180910390fd5b819050919050565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561515a5750615203565b8073ffffffffffffffffffffffffffffffffffffffff166305285d7f8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b1580156151e957600080fd5b505af11580156151fd573d6000803e3d6000fd5b50505050505b505050565b600080831182906152b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561527957808201518184015260208101905061525e565b50505050905090810190601f1680156152a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816152c057fe5b049050809150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561536d57600080fd5b505afa158015615381573d6000803e3d6000fd5b505050506040513d602081101561539757600080fd5b8101908080519060200190929190505050600a819055507f8a0df8ef054fae2c3d2d19a7b322e864870cc9fd3cb07fb9526309c596244bf4600a546040518082815260200191505060405180910390a1565b60006012549050600060135490506000601060009054906101000a900465ffffffffffff1665ffffffffffff1690506000601060069054906101000a900465ffffffffffff1665ffffffffffff16905060006010600c9054906101000a900463ffffffff16905060008161545b6127ea565b03905060008163ffffffff1611156155e0576154756127ea565b6010600c6101000a81548163ffffffff021916908363ffffffff1602179055506000838510156154fe576000670de0b6b3a76400008363ffffffff168887670de0b6b3a76400008a8a0302816154c757fe5b040202816154d157fe5b049050670de0b6b3a764000081116154f35780670de0b6b3a7640000036154f6565b60005b915050615542565b6000670de0b6b3a76400008363ffffffff168887670de0b6b3a7640000898b03028161552657fe5b0402028161553057fe5b049050670de0b6b3a764000081019150505b670de0b6b3a76400008185028161555557fe5b0493506407620d070084111561556e576407620d070093505b6312e687c0841015615582576312e687c093505b83601060066101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f713a98ffb7d769b8e33e2ee945ebb6acb7f397532688164d3ce1081f903c77bc846040518082815260200191505060405180910390a1505b600080600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050600061562882600a54613e2e90919063ffffffff16565b90506000811461564b5780670de0b6b3a764000083028161564557fe5b0461564e565b60005b9250505086811161566c57868185028161566457fe5b0494506156b8565b600087670de0b6b3a764000003670de0b6b3a7640000898403028161568d57fe5b049050670de0b6b3a764000085670de0b6b3a7640000836001600503020102816156b357fe5b049550505b84601060006101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f338541dc9083f6af6715482fb419e1483c1ae9097764fd68a5dc98109bd5a788856040518082815260200191505060405180910390a150505050505050565b604051806040016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff1681525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061579857805160ff19168380011785556157c6565b828001600101855582156157c6579182015b828111156157c55782518255916020019190600101906157aa565b5b5090506157d391906157d7565b5090565b6157f991905b808211156157f55760008160009055506001016157dd565b5090565b9056fe454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a7231582061b95e98f600883328f4345f410e389b22f8b24fc3c01594efdc9999e6525c8b64736f6c63430005100032a265627a7a72315820ad2a8da74105b50d867d21171b5f2e8a79cf670bf5b11b2c8764410da243bf8164736f6c63430005100032",
39
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806354bcd7ad14610030575b600080fd5b61007f6004803603604081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506100c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006060604051806020016100d5906101a1565b6020820181038252601f19601f8201166040525090506000338585604051602001808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018260ff1660ff1660f81b81526001019350505050604051602081830303815290604052805190602001209050808251602084016000f59250505092915050565b6159e4806101af8339019056fe60806040526012600260006101000a81548160ff021916908360ff1602179055506001600b60006101000a81548160ff021916908315150217905550670de0b6b3a7640000600e60006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555064010000000042816200008757fe5b06600e601c6101000a81548163ffffffff021916908363ffffffff160217905550635e80a6c0601060066101000a81548165ffffffffffff021916908365ffffffffffff1602179055506401000000004281620000e057fe5b066010600c6101000a81548163ffffffff021916908363ffffffff16021790555067016345785d8a00006011556709b6e64a8ec600006012556486bd6db0206013553480156200012f57600080fd5b506158a480620001406000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c806370a08231116101e9578063b7f1118a1161010f578063c914b437116100ad578063e07660001161007c578063e07660001461126d578063e12b63061461128b578063fca7820b146112b5578063fff6cae9146112e357610399565b8063c914b437146110e4578063d505accf14611112578063d8dfeb45146111ab578063dd62ed3e146111f557610399565b8063bc25cf77116100e9578063bc25cf771461101a578063be340e321461105e578063c45a01551461107c578063c72f3fbb146110c657610399565b8063b7f1118a14610f8e578063b95b92a314610fd2578063ba9a7a5614610ffc57610399565b806395a2251f11610187578063a6afed9511610156578063a6afed9514610ec2578063a9059cbb14610ecc578063aa5af0fd14610f32578063ad7a672f14610f7057610399565b806395a2251f14610d3057806395d89b4114610d885780639e79b55c14610e0b578063a071571914610ea457610399565b806386b9d81f116101c357806386b9d81f14610bf657806391b4274514610c6e578063926d845b14610c9c5780639292b03214610d0257610399565b806370a0823114610b1c578063796b89b914610b745780637ecebe0014610b9e57610399565b806335542822116102ce5780634d73e9ba1161026c5780636a030c111161023b5780636a030c11146108f45780636a62784214610a025780636bd76d2414610a5a5780636f307dc314610ad257610399565b80634d73e9ba14610816578063559572201461086e5780635b2b9d1a146108b857806368544065146108d657610399565b80634322b714116102a85780634322b71414610792578063452ae95f146107b057806347bd3718146107ce5780634a5d316c1461080c57610399565b806335542822146107125780633644e515146107565780633ba0b9a91461077457610399565b80632374e8a91161033b57806327549a0b1161031557806327549a0b146106845780632d5231d3146106b257806330adf81f146106d0578063313ce567146106ee57610399565b80632374e8a9146105c257806323b872dd146105e0578063253c24f31461066657610399565b8063095ea7b311610377578063095ea7b31461045d57806318160ddd146104c35780631aebf12f146104e15780631e7dcc0d146104ff57610399565b806301f8c1c81461039e57806306fdde03146103bc578063075f4e7f1461043f575b600080fd5b6103a66112ed565b6040518082815260200191505060405180910390f35b6103c4611314565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104045780820151818401526020810190506103e9565b50505050905090810190601f1680156104315780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104476113b2565b6040518082815260200191505060405180910390f35b6104a96004803603604081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113bb565b604051808215151515815260200191505060405180910390f35b6104cb6113d2565b6040518082815260200191505060405180910390f35b6104e96113d8565b6040518082815260200191505060405180910390f35b6105c06004803603608081101561051557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561057c57600080fd5b82018360208201111561058e57600080fd5b803590602001918460018302840111640100000000831117156105b057600080fd5b90919293919293905050506113de565b005b6105ca611a00565b6040518082815260200191505060405180910390f35b61064c600480360360608110156105f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611a0c565b604051808215151515815260200191505060405180910390f35b61066e611c0e565b6040518082815260200191505060405180910390f35b6106b06004803603602081101561069a57600080fd5b8101908080359060200190929190505050611c18565b005b6106ba611d27565b6040518082815260200191505060405180910390f35b6106d8611d2d565b6040518082815260200191505060405180910390f35b6106f6611d54565b604051808260ff1660ff16815260200191505060405180910390f35b6107546004803603602081101561072857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d67565b005b61075e611ece565b6040518082815260200191505060405180910390f35b61077c611ed4565b6040518082815260200191505060405180910390f35b61079a611f93565b6040518082815260200191505060405180910390f35b6107b8611f99565b6040518082815260200191505060405180910390f35b6107d6611fa2565b60405180826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200191505060405180910390f35b610814611fc1565b005b6108586004803603602081101561082c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120c8565b6040518082815260200191505060405180910390f35b61087661224f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c0612275565b6040518082815260200191505060405180910390f35b6108de61227a565b6040518082815260200191505060405180910390f35b610a006004803603608081101561090a57600080fd5b810190808035906020019064010000000081111561092757600080fd5b82018360208201111561093957600080fd5b8035906020019184600183028401116401000000008311171561095b57600080fd5b90919293919293908035906020019064010000000081111561097c57600080fd5b82018360208201111561098e57600080fd5b803590602001918460018302840111640100000000831117156109b057600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612286565b005b610a4460048036036020811015610a1857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612474565b6040518082815260200191505060405180910390f35b610abc60048036036040811015610a7057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612787565b6040518082815260200191505060405180910390f35b610ada6127ac565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b5e60048036036020811015610b3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d2565b6040518082815260200191505060405180910390f35b610b7c6127ea565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b610be060048036036020811015610bb457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612800565b6040518082815260200191505060405180910390f35b610c5860048036036040811015610c0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612818565b6040518082815260200191505060405180910390f35b610c76612bc8565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b610ce860048036036040811015610cb257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612be0565b604051808215151515815260200191505060405180910390f35b610d2e60048036036020811015610d1857600080fd5b8101908080359060200190929190505050612bf7565b005b610d7260048036036020811015610d4657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d0b565b6040518082815260200191505060405180910390f35b610d90612fbc565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610dd0578082015181840152602081019050610db5565b50505050905090810190601f168015610dfd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ea2600480360360e0811015610e2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061305a565b005b610eac6130a1565b6040518082815260200191505060405180910390f35b610eca6130ac565b005b610f1860048036036040811015610ee257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132ff565b604051808215151515815260200191505060405180910390f35b610f3a613316565b60405180826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200191505060405180910390f35b610f78613336565b6040518082815260200191505060405180910390f35b610fd060048036036020811015610fa457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061333c565b005b610fda61337e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b611004613394565b6040518082815260200191505060405180910390f35b61105c6004803603602081101561103057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061339a565b005b61106661354c565b6040518082815260200191505060405180910390f35b611084613552565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110ce613578565b6040518082815260200191505060405180910390f35b6110ec613584565b604051808265ffffffffffff1665ffffffffffff16815260200191505060405180910390f35b6111a9600480360360e081101561112857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff169060200190929190803590602001909291908035906020019092919050505061359c565b005b6111b36135e3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6112576004803603604081101561120b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613609565b6040518082815260200191505060405180910390f35b61127561362e565b6040518082815260200191505060405180910390f35b611293613636565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b6112e1600480360360208110156112cb57600080fd5b810190808035906020019092919050505061364c565b005b6112eb613759565b005b7ff6d86ed606f871fa1a557ac0ba607adce07767acf53f492fb215a1a4db4aea6f60001b81565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113aa5780601f1061137f576101008083540402835291602001916113aa565b820191906000526020600020905b81548152906001019060200180831161138d57829003601f168201915b505050505081565b640d7957c4d081565b60006113c8338484613823565b6001905092915050565b60035481565b60125481565b600b60009054906101000a900460ff16611460576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506114836130ac565b6000600a54905080841115611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b61150b86338661390e565b600084111561151f5761151e8585613af0565b5b6000838390501115611633578473ffffffffffffffffffffffffffffffffffffffff1663876d9d9e33888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561161a57600080fd5b505af115801561162e573d6000803e3d6000fd5b505050505b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b810190808051906020019092919050505090506000611747670de0b6b3a764000061173966038d7ea4c6800089613d5e90919063ffffffff16565b613de490919063ffffffff16565b9050600061175e8288613e2e90919063ffffffff16565b90506000611787856117798a87613e2e90919063ffffffff16565b613eb690919063ffffffff16565b905060008060006117998d8686613f00565b9250925092508385111561193257600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639aac2c538e30856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561188457600080fd5b505af1158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b8101908080519060200190929190505050611931576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f496d7065726d61783a20494e53554646494349454e545f4c495155494449545981525060200191505060405180910390fd5b5b8b73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f33f3048bd4e6af45e53afb722adfd57dbde82da7e93e44db921fb4b8c6a70c4b8e88888888604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a450505050505050506119de6142af565b6001600b60006101000a81548160ff0219169083151502179055505050505050565b670853a0d2313c000081565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611bf857611b77826040518060400160405280601e81526020017f496d7065726d61783a205452414e534645525f4e4f545f414c4c4f5745440000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142c19092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611c03848484614381565b600190509392505050565b6505436648e14081565b600b60009054906101000a900460ff16611c9a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550611ccb81640d7957c4d06505436648e14061454c565b806013819055507f1396dfcdb64fb7eb77fb84966f27b81afe14aa70b6e966c68d74af3302a9fe90816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b60135481565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b600260009054906101000a900460ff1681565b600b60009054906101000a900460ff16611de9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550611e0c614645565b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f468b6598e7e810c65c9858b5f23a2d5b8692fb753b78a032232de4c6ed3cabbf81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b60065481565b6000611ede6130ac565b600060035490506000611f27600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600a54613e2e90919063ffffffff16565b90506000821480611f385750600081145b15611f4f57670de0b6b3a764000092505050611f90565b6000611f7e83611f70670de0b6b3a764000085613d5e90919063ffffffff16565b613de490919063ffffffff16565b9050611f8a818461478a565b93505050505b90565b60115481565b6407620d070081565b600e809054906101000a90046dffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496d7065726d61783a20464143544f52595f414c52454144595f53455400000081525060200191505060405180910390fd5b33600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006120d261571d565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250509050600081602001516dffffffffffffffffffffffffffff1614156121cd57600091505061224a565b61224681602001516dffffffffffffffffffffffffffff16612238600e60009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1684600001516dffffffffffffffffffffffffffff16613d5e90919063ffffffff16565b613de490919063ffffffff16565b9150505b919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600581565b670c7d713b49da000081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612349576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b6123db86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061490f565b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600f81905550505050505050565b6000600b60009054906101000a900460ff166124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156125b457600080fd5b505afa1580156125c8573d6000803e3d6000fd5b505050506040513d60208110156125de57600080fd5b810190808051906020019092919050505090506000612608600a5483613eb690919063ffffffff16565b905061263e612615611ed4565b612630670de0b6b3a764000084613d5e90919063ffffffff16565b613de490919063ffffffff16565b925060006003541415612670576126606103e884613eb690919063ffffffff16565b925061266f60006103e8614a1b565b5b600083116126e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f496d7065726d61783a204d494e545f414d4f554e545f5a45524f00000000000081525060200191505060405180910390fd5b6126f08484614a1b565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8386604051808381526020018281526020019250505060405180910390a350506127676142af565b6001600b60006101000a81548160ff021916908315150217905550919050565b600c602052816000526040600020602052806000526040600020600091509150505481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090505481565b600064010000000042816127fa57fe5b06905090565b60076020528060005260406000206000915090505481565b6000600b60009054906101000a900460ff1661289c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506128bf6130ac565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561296057600080fd5b505afa158015612974573d6000803e3d6000fd5b505050506040513d602081101561298a57600080fd5b8101908080519060200190929190505050905060006129b4600a5483613eb690919063ffffffff16565b905060006129ca6129c4876120c8565b83614b35565b9050600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b2a02ff18688846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612aa957600080fd5b505af1158015612abd573d6000803e3d6000fd5b505050506040513d6020811015612ad357600080fd5b810190808051906020019092919050505093506000806000612af789600087613f00565b9250925092508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb0dbe18c6ffdf0da655dd690e77211d379205c497be44c64447c3f5f021b51678a89888888604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a4505050505050612ba76142af565b6001600b60006101000a81548160ff02191690831515021790555092915050565b601060069054906101000a900465ffffffffffff1681565b6000612bed338484614b4e565b6001905092915050565b600b60009054906101000a900460ff16612c79576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550612caf81670853a0d2313c0000670c7d713b49da000061454c565b806012819055507f7a550b1995ff63260fb313f12024e66e73bad425372e5af6b1e04cb3799ef38c816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900460ff16612d8f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612e22670de0b6b3a7640000612e14612e05611ed4565b84613d5e90919063ffffffff16565b613de490919063ffffffff16565b915060008211612e9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a2052454445454d5f414d4f554e545f5a45524f0000000081525060200191505060405180910390fd5b600a54821115612f12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e53554646494349454e545f43415348000000000081525060200191505060405180910390fd5b612f1c8383613af0565b612f263082614c39565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3f693fff038bb8a046aa76d9516190ac7444f7d69cf952c4cbdc086fdef2d6fc8484604051808381526020018281526020019250505060405180910390a350612f9c6142af565b6001600b60006101000a81548160ff021916908315150217905550919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130525780601f1061302757610100808354040283529160200191613052565b820191906000526020600020905b81548152906001019060200180831161303557829003601f168201915b505050505081565b61308d878787878787877ff6d86ed606f871fa1a557ac0ba607adce07767acf53f492fb215a1a4db4aea6f60001b614d53565b613098878787614b4e565b50505050505050565b66038d7ea4c6800081565b6000600e60009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1690506000600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1690506000600e601c9054906101000a900463ffffffff169050600061312e6127ea565b90508063ffffffff168263ffffffff16141561314d57505050506132fd565b6000828203905081600e601c6101000a81548163ffffffff021916908363ffffffff16021790555060006131ac8263ffffffff16601060009054906101000a900465ffffffffffff1665ffffffffffff16613d5e90919063ffffffff16565b905060006131dd670de0b6b3a76400006131cf8885613d5e90919063ffffffff16565b613de490919063ffffffff16565b90506131f28187613e2e90919063ffffffff16565b9550613233613224670de0b6b3a76400006132168a86613d5e90919063ffffffff16565b613de490919063ffffffff16565b88613e2e90919063ffffffff16565b965061323e8761506a565b600e60006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555061327b8661506a565b600e806101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055507f875352fb3fadeb8c0be7cbbe8ff761b308fa7033470cd0287f02f3436fd76cb981888860405180848152602001838152602001828152602001935050505060405180910390a1505050505050505b565b600061330c338484614381565b6001905092915050565b600e60009054906101000a90046dffffffffffffffffffffffffffff1681565b600a5481565b61337b81613349836120c8565b600e60009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166150f8565b50565b600e601c9054906101000a900463ffffffff1681565b6103e881565b600b60009054906101000a900460ff1661341c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff02191690831515021790555061352e81613529600a54600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156134e057600080fd5b505afa1580156134f4573d6000803e3d6000fd5b505050506040513d602081101561350a57600080fd5b8101908080519060200190929190505050613eb690919063ffffffff16565b613af0565b6001600b60006101000a81548160ff02191690831515021790555050565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6702c68af0bb14000081565b601060009054906101000a900465ffffffffffff1681565b6135cf878787878787877f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b614d53565b6135da878787613823565b50505050505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052816000526040600020602052806000526040600020600091509150505481565b6312e687c081565b6010600c9054906101000a900463ffffffff1681565b600b60009054906101000a900460ff166136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506136fd8160006702c68af0bb14000061454c565b806011819055507f9d9cd27245b4e6b06dcf523ac57b6e851b934e199eee376313f906e94bfbfd55816040518082815260200191505060405180910390a16001600b60006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff166137db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496d7065726d61783a205245454e54455245440000000000000000000000000081525060200191505060405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506137fe6130ac565b6138066142af565b6001600b60006101000a81548160ff021916908315150217905550565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139eb57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114155b15613aea5781811015613a66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496d7065726d61783a20424f52524f575f4e4f545f414c4c4f5745440000000081525060200191505060405180910390fd5b818103600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505050565b60006060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310613c3f5780518252602082019150602081019050602083039250613c1c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613ca1576040519150601f19603f3d011682016040523d82523d6000602084013e613ca6565b606091505b5091509150818015613ce65750600081511480613ce55750808060200190516020811015613cd357600080fd5b81019080805190602001909291905050505b5b613d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a205452414e534645525f4641494c45440000000000000081525060200191505060405180910390fd5b50505050565b600080831415613d715760009050613dde565b6000828402905082848281613d8257fe5b0414613dd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061584f6021913960400191505060405180910390fd5b809150505b92915050565b6000613e2683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615208565b905092915050565b600080828401905083811015613eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000613ef883836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506142c1565b905092915050565b6000806000613f0e866120c8565b925083851415613f54578283600e809054906101000a90046dffffffffffffffffffffffffffff16806dffffffffffffffffffffffffffff1690509250925092506142a6565b6000600e60009054906101000a90046dffffffffffffffffffffffffffff169050848611156140d5576000600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008688039050613fda8187613e2e90919063ffffffff16565b9450613fe58561506a565b8260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055508282600001600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555061409081600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16613e2e90919063ffffffff16565b935061409b8461506a565b600e806101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050614289565b6000600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000878703905080861161412d576000614131565b8086035b945061413c8561506a565b8260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060008514156141b857600082600001600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506141f0565b8282600001600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505b60006142058688613eb690919063ffffffff16565b9050600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169450808511614243576000614247565b8085035b94506142528561506a565b600e806101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050505b6142a48784836dffffffffffffffffffffffffffff166150f8565b505b93509350939050565b6142b76152ce565b6142bf6153e9565b565b600083831115829061436e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614333578082015181840152602081019050614318565b50505050905090810190601f1680156143605780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b61440a816040518060400160405280601b81526020017f496d7065726d61783a205452414e534645525f544f4f5f484947480000000000815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546142c19092919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061449f81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2e90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b614554614645565b818310156145ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b80831115614640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496d7065726d61783a20494e56414c49445f53455454494e470000000000000081525060200191505060405180910390fd5b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b815260040160206040518083038186803b1580156146ad57600080fd5b505afa1580156146c1573d6000803e3d6000fd5b505050506040513d60208110156146d757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f496d7065726d61783a20554e415554484f52495a45440000000000000000000081525060200191505060405180910390fd5b565b600080600f549050808411156149045760006147ef6147e0670de0b6b3a76400006147d26011546147c4878b613eb690919063ffffffff16565b613d5e90919063ffffffff16565b613de490919063ffffffff16565b86613eb690919063ffffffff16565b9050600061482a8561481c8461480e8a8a613d5e90919063ffffffff16565b613de490919063ffffffff16565b613eb690919063ffffffff16565b9050600081141561484057859350505050614909565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663345ef9416040518163ffffffff1660e01b815260040160206040518083038186803b1580156148aa57600080fd5b505afa1580156148be573d6000803e3d6000fd5b505050506040513d60208110156148d457600080fd5b810190808051906020019092919050505090506148f18183614a1b565b82600f8190555082945050505050614909565b839150505b92915050565b8160009080519060200190614925929190615757565b50806001908051906020019061493c929190615757565b50600046905060405180806157fd605291396052019050604051809103902083805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405160208183030381529060405280519060200120600681905550505050565b614a3081600354613e2e90919063ffffffff16565b600381905550614a8881600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e2e90919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000818310614b445781614b46565b825b905092915050565b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3c1215b41d54142382d54a05fb991007165ae91bcb1879bac8b290d9111aaf4836040518082815260200191505060405180910390a3505050565b614c8b81600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613eb690919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614ce381600354613eb690919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b42851015614dc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496d7065726d61783a204558504952454400000000000000000000000000000081525060200191505060405180910390fd5b6000600654828a8a8a600760008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558b604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614f78573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015614fec57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61505e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496d7065726d61783a20494e56414c49445f5349474e4154555245000000000081525060200191505060405180910390fd5b50505050505050505050565b60006e01000000000000000000000000000082106150f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496d7065726d61783a205341464531313200000000000000000000000000000081525060200191505060405180910390fd5b819050919050565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561515a5750615203565b8073ffffffffffffffffffffffffffffffffffffffff166305285d7f8585856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b1580156151e957600080fd5b505af11580156151fd573d6000803e3d6000fd5b50505050505b505050565b600080831182906152b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561527957808201518184015260208101905061525e565b50505050905090810190601f1680156152a65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816152c057fe5b049050809150509392505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561536d57600080fd5b505afa158015615381573d6000803e3d6000fd5b505050506040513d602081101561539757600080fd5b8101908080519060200190929190505050600a819055507f8a0df8ef054fae2c3d2d19a7b322e864870cc9fd3cb07fb9526309c596244bf4600a546040518082815260200191505060405180910390a1565b60006012549050600060135490506000601060009054906101000a900465ffffffffffff1665ffffffffffff1690506000601060069054906101000a900465ffffffffffff1665ffffffffffff16905060006010600c9054906101000a900463ffffffff16905060008161545b6127ea565b03905060008163ffffffff1611156155e0576154756127ea565b6010600c6101000a81548163ffffffff021916908363ffffffff1602179055506000838510156154fe576000670de0b6b3a76400008363ffffffff168887670de0b6b3a76400008a8a0302816154c757fe5b040202816154d157fe5b049050670de0b6b3a764000081116154f35780670de0b6b3a7640000036154f6565b60005b915050615542565b6000670de0b6b3a76400008363ffffffff168887670de0b6b3a7640000898b03028161552657fe5b0402028161553057fe5b049050670de0b6b3a764000081019150505b670de0b6b3a76400008185028161555557fe5b0493506407620d070084111561556e576407620d070093505b6312e687c0841015615582576312e687c093505b83601060066101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f713a98ffb7d769b8e33e2ee945ebb6acb7f397532688164d3ce1081f903c77bc846040518082815260200191505060405180910390a1505b600080600e809054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050600061562882600a54613e2e90919063ffffffff16565b90506000811461564b5780670de0b6b3a764000083028161564557fe5b0461564e565b60005b9250505086811161566c57868185028161566457fe5b0494506156b8565b600087670de0b6b3a764000003670de0b6b3a7640000898403028161568d57fe5b049050670de0b6b3a764000085670de0b6b3a7640000836001600503020102816156b357fe5b049550505b84601060006101000a81548165ffffffffffff021916908365ffffffffffff1602179055507f338541dc9083f6af6715482fb419e1483c1ae9097764fd68a5dc98109bd5a788856040518082815260200191505060405180910390a150505050505050565b604051806040016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff1681525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061579857805160ff19168380011785556157c6565b828001600101855582156157c6579182015b828111156157c55782518255916020019190600101906157aa565b5b5090506157d391906157d7565b5090565b6157f991905b808211156157f55760008160009055506001016157dd565b5090565b9056fe454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a7231582061b95e98f600883328f4345f410e389b22f8b24fc3c01594efdc9999e6525c8b64736f6c63430005100032a265627a7a72315820ad2a8da74105b50d867d21171b5f2e8a79cf670bf5b11b2c8764410da243bf8164736f6c63430005100032",
40
+ "sourceMap": "230:404:5:-;;;267:24;8:9:-1;5:2;;;30:1;27;20:12;5:2;267:24:5;230:404;;;;;;",
41
+ "deployedSourceMap": "230:404:5:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;230:404:5;;;;;;;;;;;;;;;;;;;297:334;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;297:334:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;377:18;402:21;426: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;426:29:5;402:53;;460:12;502:10;514:13;529:5;485:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;485:50:5;;;475:61;;;;;;460:76;;617:4;606:8;600:15;595:2;585:8;581:17;578:1;570:52;556:66;;550:77;;;;;;:::o;230:404::-;;;;;;;;:::o",
42
+ "source": "pragma solidity =0.5.16;\r\n\r\nimport \"./Borrowable.sol\";\r\nimport \"./interfaces/IBDeployer.sol\";\r\n\r\n/*\r\n * This contract is used by the Factory to deploy Borrowable(s)\r\n * The bytecode would be too long to fit in the Factory\r\n */\r\n\r\ncontract BDeployer is IBDeployer {\r\n\tconstructor () public {}\r\n\t\r\n\tfunction deployBorrowable(address uniswapV2Pair, uint8 index) external returns (address borrowable) {\r\n\t\tbytes memory bytecode = type(Borrowable).creationCode;\r\n\t\tbytes32 salt = keccak256(abi.encodePacked(msg.sender, uniswapV2Pair, index));\r\n\t\tassembly {\r\n\t\t\tborrowable := create2(0, add(bytecode, 32), mload(bytecode), salt)\r\n\t\t}\r\n\t}\r\n}",
43
+ "sourcePath": "C:/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BDeployer.sol",
44
+ "ast": {
45
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BDeployer.sol",
46
+ "exportedSymbols": {
47
+ "BDeployer": [
48
+ 1101
49
+ ]
50
+ },
51
+ "id": 1102,
52
+ "nodeType": "SourceUnit",
53
+ "nodes": [
54
+ {
55
+ "id": 1062,
56
+ "literals": [
57
+ "solidity",
58
+ "=",
59
+ "0.5",
60
+ ".16"
61
+ ],
62
+ "nodeType": "PragmaDirective",
63
+ "src": "0:24:5"
64
+ },
65
+ {
66
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/Borrowable.sol",
67
+ "file": "./Borrowable.sol",
68
+ "id": 1063,
69
+ "nodeType": "ImportDirective",
70
+ "scope": 1102,
71
+ "sourceUnit": 2439,
72
+ "src": "28:26:5",
73
+ "symbolAliases": [],
74
+ "unitAlias": ""
75
+ },
76
+ {
77
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IBDeployer.sol",
78
+ "file": "./interfaces/IBDeployer.sol",
79
+ "id": 1064,
80
+ "nodeType": "ImportDirective",
81
+ "scope": 1102,
82
+ "sourceUnit": 4933,
83
+ "src": "56:37:5",
84
+ "symbolAliases": [],
85
+ "unitAlias": ""
86
+ },
87
+ {
88
+ "baseContracts": [
89
+ {
90
+ "arguments": null,
91
+ "baseName": {
92
+ "contractScope": null,
93
+ "id": 1065,
94
+ "name": "IBDeployer",
95
+ "nodeType": "UserDefinedTypeName",
96
+ "referencedDeclaration": 4932,
97
+ "src": "252:10:5",
98
+ "typeDescriptions": {
99
+ "typeIdentifier": "t_contract$_IBDeployer_$4932",
100
+ "typeString": "contract IBDeployer"
101
+ }
102
+ },
103
+ "id": 1066,
104
+ "nodeType": "InheritanceSpecifier",
105
+ "src": "252:10:5"
106
+ }
107
+ ],
108
+ "contractDependencies": [
109
+ 2438,
110
+ 4932
111
+ ],
112
+ "contractKind": "contract",
113
+ "documentation": null,
114
+ "fullyImplemented": true,
115
+ "id": 1101,
116
+ "linearizedBaseContracts": [
117
+ 1101,
118
+ 4932
119
+ ],
120
+ "name": "BDeployer",
121
+ "nodeType": "ContractDefinition",
122
+ "nodes": [
123
+ {
124
+ "body": {
125
+ "id": 1069,
126
+ "nodeType": "Block",
127
+ "src": "289:2:5",
128
+ "statements": []
129
+ },
130
+ "documentation": null,
131
+ "id": 1070,
132
+ "implemented": true,
133
+ "kind": "constructor",
134
+ "modifiers": [],
135
+ "name": "",
136
+ "nodeType": "FunctionDefinition",
137
+ "parameters": {
138
+ "id": 1067,
139
+ "nodeType": "ParameterList",
140
+ "parameters": [],
141
+ "src": "279:2:5"
142
+ },
143
+ "returnParameters": {
144
+ "id": 1068,
145
+ "nodeType": "ParameterList",
146
+ "parameters": [],
147
+ "src": "289:0:5"
148
+ },
149
+ "scope": 1101,
150
+ "src": "267:24:5",
151
+ "stateMutability": "nonpayable",
152
+ "superFunction": null,
153
+ "visibility": "public"
154
+ },
155
+ {
156
+ "body": {
157
+ "id": 1099,
158
+ "nodeType": "Block",
159
+ "src": "397:234:5",
160
+ "statements": [
161
+ {
162
+ "assignments": [
163
+ 1080
164
+ ],
165
+ "declarations": [
166
+ {
167
+ "constant": false,
168
+ "id": 1080,
169
+ "name": "bytecode",
170
+ "nodeType": "VariableDeclaration",
171
+ "scope": 1099,
172
+ "src": "402:21:5",
173
+ "stateVariable": false,
174
+ "storageLocation": "memory",
175
+ "typeDescriptions": {
176
+ "typeIdentifier": "t_bytes_memory_ptr",
177
+ "typeString": "bytes"
178
+ },
179
+ "typeName": {
180
+ "id": 1079,
181
+ "name": "bytes",
182
+ "nodeType": "ElementaryTypeName",
183
+ "src": "402:5:5",
184
+ "typeDescriptions": {
185
+ "typeIdentifier": "t_bytes_storage_ptr",
186
+ "typeString": "bytes"
187
+ }
188
+ },
189
+ "value": null,
190
+ "visibility": "internal"
191
+ }
192
+ ],
193
+ "id": 1085,
194
+ "initialValue": {
195
+ "argumentTypes": null,
196
+ "expression": {
197
+ "argumentTypes": null,
198
+ "arguments": [
199
+ {
200
+ "argumentTypes": null,
201
+ "id": 1082,
202
+ "name": "Borrowable",
203
+ "nodeType": "Identifier",
204
+ "overloadedDeclarations": [],
205
+ "referencedDeclaration": 2438,
206
+ "src": "431:10:5",
207
+ "typeDescriptions": {
208
+ "typeIdentifier": "t_type$_t_contract$_Borrowable_$2438_$",
209
+ "typeString": "type(contract Borrowable)"
210
+ }
211
+ }
212
+ ],
213
+ "expression": {
214
+ "argumentTypes": [
215
+ {
216
+ "typeIdentifier": "t_type$_t_contract$_Borrowable_$2438_$",
217
+ "typeString": "type(contract Borrowable)"
218
+ }
219
+ ],
220
+ "id": 1081,
221
+ "name": "type",
222
+ "nodeType": "Identifier",
223
+ "overloadedDeclarations": [],
224
+ "referencedDeclaration": 9831,
225
+ "src": "426:4:5",
226
+ "typeDescriptions": {
227
+ "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
228
+ "typeString": "function (address) pure"
229
+ }
230
+ },
231
+ "id": 1083,
232
+ "isConstant": false,
233
+ "isLValue": false,
234
+ "isPure": true,
235
+ "kind": "functionCall",
236
+ "lValueRequested": false,
237
+ "names": [],
238
+ "nodeType": "FunctionCall",
239
+ "src": "426:16:5",
240
+ "typeDescriptions": {
241
+ "typeIdentifier": "t_magic_meta_type_t_contract$_Borrowable_$2438",
242
+ "typeString": "type(contract Borrowable)"
243
+ }
244
+ },
245
+ "id": 1084,
246
+ "isConstant": false,
247
+ "isLValue": false,
248
+ "isPure": true,
249
+ "lValueRequested": false,
250
+ "memberName": "creationCode",
251
+ "nodeType": "MemberAccess",
252
+ "referencedDeclaration": null,
253
+ "src": "426:29:5",
254
+ "typeDescriptions": {
255
+ "typeIdentifier": "t_bytes_memory_ptr",
256
+ "typeString": "bytes memory"
257
+ }
258
+ },
259
+ "nodeType": "VariableDeclarationStatement",
260
+ "src": "402:53:5"
261
+ },
262
+ {
263
+ "assignments": [
264
+ 1087
265
+ ],
266
+ "declarations": [
267
+ {
268
+ "constant": false,
269
+ "id": 1087,
270
+ "name": "salt",
271
+ "nodeType": "VariableDeclaration",
272
+ "scope": 1099,
273
+ "src": "460:12:5",
274
+ "stateVariable": false,
275
+ "storageLocation": "default",
276
+ "typeDescriptions": {
277
+ "typeIdentifier": "t_bytes32",
278
+ "typeString": "bytes32"
279
+ },
280
+ "typeName": {
281
+ "id": 1086,
282
+ "name": "bytes32",
283
+ "nodeType": "ElementaryTypeName",
284
+ "src": "460:7:5",
285
+ "typeDescriptions": {
286
+ "typeIdentifier": "t_bytes32",
287
+ "typeString": "bytes32"
288
+ }
289
+ },
290
+ "value": null,
291
+ "visibility": "internal"
292
+ }
293
+ ],
294
+ "id": 1097,
295
+ "initialValue": {
296
+ "argumentTypes": null,
297
+ "arguments": [
298
+ {
299
+ "argumentTypes": null,
300
+ "arguments": [
301
+ {
302
+ "argumentTypes": null,
303
+ "expression": {
304
+ "argumentTypes": null,
305
+ "id": 1091,
306
+ "name": "msg",
307
+ "nodeType": "Identifier",
308
+ "overloadedDeclarations": [],
309
+ "referencedDeclaration": 9818,
310
+ "src": "502:3:5",
311
+ "typeDescriptions": {
312
+ "typeIdentifier": "t_magic_message",
313
+ "typeString": "msg"
314
+ }
315
+ },
316
+ "id": 1092,
317
+ "isConstant": false,
318
+ "isLValue": false,
319
+ "isPure": false,
320
+ "lValueRequested": false,
321
+ "memberName": "sender",
322
+ "nodeType": "MemberAccess",
323
+ "referencedDeclaration": null,
324
+ "src": "502:10:5",
325
+ "typeDescriptions": {
326
+ "typeIdentifier": "t_address_payable",
327
+ "typeString": "address payable"
328
+ }
329
+ },
330
+ {
331
+ "argumentTypes": null,
332
+ "id": 1093,
333
+ "name": "uniswapV2Pair",
334
+ "nodeType": "Identifier",
335
+ "overloadedDeclarations": [],
336
+ "referencedDeclaration": 1072,
337
+ "src": "514:13:5",
338
+ "typeDescriptions": {
339
+ "typeIdentifier": "t_address",
340
+ "typeString": "address"
341
+ }
342
+ },
343
+ {
344
+ "argumentTypes": null,
345
+ "id": 1094,
346
+ "name": "index",
347
+ "nodeType": "Identifier",
348
+ "overloadedDeclarations": [],
349
+ "referencedDeclaration": 1074,
350
+ "src": "529:5:5",
351
+ "typeDescriptions": {
352
+ "typeIdentifier": "t_uint8",
353
+ "typeString": "uint8"
354
+ }
355
+ }
356
+ ],
357
+ "expression": {
358
+ "argumentTypes": [
359
+ {
360
+ "typeIdentifier": "t_address_payable",
361
+ "typeString": "address payable"
362
+ },
363
+ {
364
+ "typeIdentifier": "t_address",
365
+ "typeString": "address"
366
+ },
367
+ {
368
+ "typeIdentifier": "t_uint8",
369
+ "typeString": "uint8"
370
+ }
371
+ ],
372
+ "expression": {
373
+ "argumentTypes": null,
374
+ "id": 1089,
375
+ "name": "abi",
376
+ "nodeType": "Identifier",
377
+ "overloadedDeclarations": [],
378
+ "referencedDeclaration": 9805,
379
+ "src": "485:3:5",
380
+ "typeDescriptions": {
381
+ "typeIdentifier": "t_magic_abi",
382
+ "typeString": "abi"
383
+ }
384
+ },
385
+ "id": 1090,
386
+ "isConstant": false,
387
+ "isLValue": false,
388
+ "isPure": true,
389
+ "lValueRequested": false,
390
+ "memberName": "encodePacked",
391
+ "nodeType": "MemberAccess",
392
+ "referencedDeclaration": null,
393
+ "src": "485:16:5",
394
+ "typeDescriptions": {
395
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
396
+ "typeString": "function () pure returns (bytes memory)"
397
+ }
398
+ },
399
+ "id": 1095,
400
+ "isConstant": false,
401
+ "isLValue": false,
402
+ "isPure": false,
403
+ "kind": "functionCall",
404
+ "lValueRequested": false,
405
+ "names": [],
406
+ "nodeType": "FunctionCall",
407
+ "src": "485:50:5",
408
+ "typeDescriptions": {
409
+ "typeIdentifier": "t_bytes_memory_ptr",
410
+ "typeString": "bytes memory"
411
+ }
412
+ }
413
+ ],
414
+ "expression": {
415
+ "argumentTypes": [
416
+ {
417
+ "typeIdentifier": "t_bytes_memory_ptr",
418
+ "typeString": "bytes memory"
419
+ }
420
+ ],
421
+ "id": 1088,
422
+ "name": "keccak256",
423
+ "nodeType": "Identifier",
424
+ "overloadedDeclarations": [],
425
+ "referencedDeclaration": 9812,
426
+ "src": "475:9:5",
427
+ "typeDescriptions": {
428
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
429
+ "typeString": "function (bytes memory) pure returns (bytes32)"
430
+ }
431
+ },
432
+ "id": 1096,
433
+ "isConstant": false,
434
+ "isLValue": false,
435
+ "isPure": false,
436
+ "kind": "functionCall",
437
+ "lValueRequested": false,
438
+ "names": [],
439
+ "nodeType": "FunctionCall",
440
+ "src": "475:61:5",
441
+ "typeDescriptions": {
442
+ "typeIdentifier": "t_bytes32",
443
+ "typeString": "bytes32"
444
+ }
445
+ },
446
+ "nodeType": "VariableDeclarationStatement",
447
+ "src": "460:76:5"
448
+ },
449
+ {
450
+ "externalReferences": [
451
+ {
452
+ "salt": {
453
+ "declaration": 1087,
454
+ "isOffset": false,
455
+ "isSlot": false,
456
+ "src": "617:4:5",
457
+ "valueSize": 1
458
+ }
459
+ },
460
+ {
461
+ "borrowable": {
462
+ "declaration": 1077,
463
+ "isOffset": false,
464
+ "isSlot": false,
465
+ "src": "556:10:5",
466
+ "valueSize": 1
467
+ }
468
+ },
469
+ {
470
+ "bytecode": {
471
+ "declaration": 1080,
472
+ "isOffset": false,
473
+ "isSlot": false,
474
+ "src": "606:8:5",
475
+ "valueSize": 1
476
+ }
477
+ },
478
+ {
479
+ "bytecode": {
480
+ "declaration": 1080,
481
+ "isOffset": false,
482
+ "isSlot": false,
483
+ "src": "585:8:5",
484
+ "valueSize": 1
485
+ }
486
+ }
487
+ ],
488
+ "id": 1098,
489
+ "nodeType": "InlineAssembly",
490
+ "operations": "{\n borrowable := create2(0, add(bytecode, 32), mload(bytecode), salt)\n}",
491
+ "src": "541:86:5"
492
+ }
493
+ ]
494
+ },
495
+ "documentation": null,
496
+ "id": 1100,
497
+ "implemented": true,
498
+ "kind": "function",
499
+ "modifiers": [],
500
+ "name": "deployBorrowable",
501
+ "nodeType": "FunctionDefinition",
502
+ "parameters": {
503
+ "id": 1075,
504
+ "nodeType": "ParameterList",
505
+ "parameters": [
506
+ {
507
+ "constant": false,
508
+ "id": 1072,
509
+ "name": "uniswapV2Pair",
510
+ "nodeType": "VariableDeclaration",
511
+ "scope": 1100,
512
+ "src": "323:21:5",
513
+ "stateVariable": false,
514
+ "storageLocation": "default",
515
+ "typeDescriptions": {
516
+ "typeIdentifier": "t_address",
517
+ "typeString": "address"
518
+ },
519
+ "typeName": {
520
+ "id": 1071,
521
+ "name": "address",
522
+ "nodeType": "ElementaryTypeName",
523
+ "src": "323:7:5",
524
+ "stateMutability": "nonpayable",
525
+ "typeDescriptions": {
526
+ "typeIdentifier": "t_address",
527
+ "typeString": "address"
528
+ }
529
+ },
530
+ "value": null,
531
+ "visibility": "internal"
532
+ },
533
+ {
534
+ "constant": false,
535
+ "id": 1074,
536
+ "name": "index",
537
+ "nodeType": "VariableDeclaration",
538
+ "scope": 1100,
539
+ "src": "346:11:5",
540
+ "stateVariable": false,
541
+ "storageLocation": "default",
542
+ "typeDescriptions": {
543
+ "typeIdentifier": "t_uint8",
544
+ "typeString": "uint8"
545
+ },
546
+ "typeName": {
547
+ "id": 1073,
548
+ "name": "uint8",
549
+ "nodeType": "ElementaryTypeName",
550
+ "src": "346:5:5",
551
+ "typeDescriptions": {
552
+ "typeIdentifier": "t_uint8",
553
+ "typeString": "uint8"
554
+ }
555
+ },
556
+ "value": null,
557
+ "visibility": "internal"
558
+ }
559
+ ],
560
+ "src": "322:36:5"
561
+ },
562
+ "returnParameters": {
563
+ "id": 1078,
564
+ "nodeType": "ParameterList",
565
+ "parameters": [
566
+ {
567
+ "constant": false,
568
+ "id": 1077,
569
+ "name": "borrowable",
570
+ "nodeType": "VariableDeclaration",
571
+ "scope": 1100,
572
+ "src": "377:18:5",
573
+ "stateVariable": false,
574
+ "storageLocation": "default",
575
+ "typeDescriptions": {
576
+ "typeIdentifier": "t_address",
577
+ "typeString": "address"
578
+ },
579
+ "typeName": {
580
+ "id": 1076,
581
+ "name": "address",
582
+ "nodeType": "ElementaryTypeName",
583
+ "src": "377:7:5",
584
+ "stateMutability": "nonpayable",
585
+ "typeDescriptions": {
586
+ "typeIdentifier": "t_address",
587
+ "typeString": "address"
588
+ }
589
+ },
590
+ "value": null,
591
+ "visibility": "internal"
592
+ }
593
+ ],
594
+ "src": "376:20:5"
595
+ },
596
+ "scope": 1101,
597
+ "src": "297:334:5",
598
+ "stateMutability": "nonpayable",
599
+ "superFunction": 4931,
600
+ "visibility": "external"
601
+ }
602
+ ],
603
+ "scope": 1102,
604
+ "src": "230:404:5"
605
+ }
606
+ ],
607
+ "src": "0:634:5"
608
+ },
609
+ "legacyAST": {
610
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/BDeployer.sol",
611
+ "exportedSymbols": {
612
+ "BDeployer": [
613
+ 1101
614
+ ]
615
+ },
616
+ "id": 1102,
617
+ "nodeType": "SourceUnit",
618
+ "nodes": [
619
+ {
620
+ "id": 1062,
621
+ "literals": [
622
+ "solidity",
623
+ "=",
624
+ "0.5",
625
+ ".16"
626
+ ],
627
+ "nodeType": "PragmaDirective",
628
+ "src": "0:24:5"
629
+ },
630
+ {
631
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/Borrowable.sol",
632
+ "file": "./Borrowable.sol",
633
+ "id": 1063,
634
+ "nodeType": "ImportDirective",
635
+ "scope": 1102,
636
+ "sourceUnit": 2439,
637
+ "src": "28:26:5",
638
+ "symbolAliases": [],
639
+ "unitAlias": ""
640
+ },
641
+ {
642
+ "absolutePath": "/C/Users/simor/Desktop/impermax-x-uniswapv2-periphery/test/Contracts/imx-univ2-core/interfaces/IBDeployer.sol",
643
+ "file": "./interfaces/IBDeployer.sol",
644
+ "id": 1064,
645
+ "nodeType": "ImportDirective",
646
+ "scope": 1102,
647
+ "sourceUnit": 4933,
648
+ "src": "56:37:5",
649
+ "symbolAliases": [],
650
+ "unitAlias": ""
651
+ },
652
+ {
653
+ "baseContracts": [
654
+ {
655
+ "arguments": null,
656
+ "baseName": {
657
+ "contractScope": null,
658
+ "id": 1065,
659
+ "name": "IBDeployer",
660
+ "nodeType": "UserDefinedTypeName",
661
+ "referencedDeclaration": 4932,
662
+ "src": "252:10:5",
663
+ "typeDescriptions": {
664
+ "typeIdentifier": "t_contract$_IBDeployer_$4932",
665
+ "typeString": "contract IBDeployer"
666
+ }
667
+ },
668
+ "id": 1066,
669
+ "nodeType": "InheritanceSpecifier",
670
+ "src": "252:10:5"
671
+ }
672
+ ],
673
+ "contractDependencies": [
674
+ 2438,
675
+ 4932
676
+ ],
677
+ "contractKind": "contract",
678
+ "documentation": null,
679
+ "fullyImplemented": true,
680
+ "id": 1101,
681
+ "linearizedBaseContracts": [
682
+ 1101,
683
+ 4932
684
+ ],
685
+ "name": "BDeployer",
686
+ "nodeType": "ContractDefinition",
687
+ "nodes": [
688
+ {
689
+ "body": {
690
+ "id": 1069,
691
+ "nodeType": "Block",
692
+ "src": "289:2:5",
693
+ "statements": []
694
+ },
695
+ "documentation": null,
696
+ "id": 1070,
697
+ "implemented": true,
698
+ "kind": "constructor",
699
+ "modifiers": [],
700
+ "name": "",
701
+ "nodeType": "FunctionDefinition",
702
+ "parameters": {
703
+ "id": 1067,
704
+ "nodeType": "ParameterList",
705
+ "parameters": [],
706
+ "src": "279:2:5"
707
+ },
708
+ "returnParameters": {
709
+ "id": 1068,
710
+ "nodeType": "ParameterList",
711
+ "parameters": [],
712
+ "src": "289:0:5"
713
+ },
714
+ "scope": 1101,
715
+ "src": "267:24:5",
716
+ "stateMutability": "nonpayable",
717
+ "superFunction": null,
718
+ "visibility": "public"
719
+ },
720
+ {
721
+ "body": {
722
+ "id": 1099,
723
+ "nodeType": "Block",
724
+ "src": "397:234:5",
725
+ "statements": [
726
+ {
727
+ "assignments": [
728
+ 1080
729
+ ],
730
+ "declarations": [
731
+ {
732
+ "constant": false,
733
+ "id": 1080,
734
+ "name": "bytecode",
735
+ "nodeType": "VariableDeclaration",
736
+ "scope": 1099,
737
+ "src": "402:21:5",
738
+ "stateVariable": false,
739
+ "storageLocation": "memory",
740
+ "typeDescriptions": {
741
+ "typeIdentifier": "t_bytes_memory_ptr",
742
+ "typeString": "bytes"
743
+ },
744
+ "typeName": {
745
+ "id": 1079,
746
+ "name": "bytes",
747
+ "nodeType": "ElementaryTypeName",
748
+ "src": "402:5:5",
749
+ "typeDescriptions": {
750
+ "typeIdentifier": "t_bytes_storage_ptr",
751
+ "typeString": "bytes"
752
+ }
753
+ },
754
+ "value": null,
755
+ "visibility": "internal"
756
+ }
757
+ ],
758
+ "id": 1085,
759
+ "initialValue": {
760
+ "argumentTypes": null,
761
+ "expression": {
762
+ "argumentTypes": null,
763
+ "arguments": [
764
+ {
765
+ "argumentTypes": null,
766
+ "id": 1082,
767
+ "name": "Borrowable",
768
+ "nodeType": "Identifier",
769
+ "overloadedDeclarations": [],
770
+ "referencedDeclaration": 2438,
771
+ "src": "431:10:5",
772
+ "typeDescriptions": {
773
+ "typeIdentifier": "t_type$_t_contract$_Borrowable_$2438_$",
774
+ "typeString": "type(contract Borrowable)"
775
+ }
776
+ }
777
+ ],
778
+ "expression": {
779
+ "argumentTypes": [
780
+ {
781
+ "typeIdentifier": "t_type$_t_contract$_Borrowable_$2438_$",
782
+ "typeString": "type(contract Borrowable)"
783
+ }
784
+ ],
785
+ "id": 1081,
786
+ "name": "type",
787
+ "nodeType": "Identifier",
788
+ "overloadedDeclarations": [],
789
+ "referencedDeclaration": 9831,
790
+ "src": "426:4:5",
791
+ "typeDescriptions": {
792
+ "typeIdentifier": "t_function_metatype_pure$_t_address_$returns$__$",
793
+ "typeString": "function (address) pure"
794
+ }
795
+ },
796
+ "id": 1083,
797
+ "isConstant": false,
798
+ "isLValue": false,
799
+ "isPure": true,
800
+ "kind": "functionCall",
801
+ "lValueRequested": false,
802
+ "names": [],
803
+ "nodeType": "FunctionCall",
804
+ "src": "426:16:5",
805
+ "typeDescriptions": {
806
+ "typeIdentifier": "t_magic_meta_type_t_contract$_Borrowable_$2438",
807
+ "typeString": "type(contract Borrowable)"
808
+ }
809
+ },
810
+ "id": 1084,
811
+ "isConstant": false,
812
+ "isLValue": false,
813
+ "isPure": true,
814
+ "lValueRequested": false,
815
+ "memberName": "creationCode",
816
+ "nodeType": "MemberAccess",
817
+ "referencedDeclaration": null,
818
+ "src": "426:29:5",
819
+ "typeDescriptions": {
820
+ "typeIdentifier": "t_bytes_memory_ptr",
821
+ "typeString": "bytes memory"
822
+ }
823
+ },
824
+ "nodeType": "VariableDeclarationStatement",
825
+ "src": "402:53:5"
826
+ },
827
+ {
828
+ "assignments": [
829
+ 1087
830
+ ],
831
+ "declarations": [
832
+ {
833
+ "constant": false,
834
+ "id": 1087,
835
+ "name": "salt",
836
+ "nodeType": "VariableDeclaration",
837
+ "scope": 1099,
838
+ "src": "460:12:5",
839
+ "stateVariable": false,
840
+ "storageLocation": "default",
841
+ "typeDescriptions": {
842
+ "typeIdentifier": "t_bytes32",
843
+ "typeString": "bytes32"
844
+ },
845
+ "typeName": {
846
+ "id": 1086,
847
+ "name": "bytes32",
848
+ "nodeType": "ElementaryTypeName",
849
+ "src": "460:7:5",
850
+ "typeDescriptions": {
851
+ "typeIdentifier": "t_bytes32",
852
+ "typeString": "bytes32"
853
+ }
854
+ },
855
+ "value": null,
856
+ "visibility": "internal"
857
+ }
858
+ ],
859
+ "id": 1097,
860
+ "initialValue": {
861
+ "argumentTypes": null,
862
+ "arguments": [
863
+ {
864
+ "argumentTypes": null,
865
+ "arguments": [
866
+ {
867
+ "argumentTypes": null,
868
+ "expression": {
869
+ "argumentTypes": null,
870
+ "id": 1091,
871
+ "name": "msg",
872
+ "nodeType": "Identifier",
873
+ "overloadedDeclarations": [],
874
+ "referencedDeclaration": 9818,
875
+ "src": "502:3:5",
876
+ "typeDescriptions": {
877
+ "typeIdentifier": "t_magic_message",
878
+ "typeString": "msg"
879
+ }
880
+ },
881
+ "id": 1092,
882
+ "isConstant": false,
883
+ "isLValue": false,
884
+ "isPure": false,
885
+ "lValueRequested": false,
886
+ "memberName": "sender",
887
+ "nodeType": "MemberAccess",
888
+ "referencedDeclaration": null,
889
+ "src": "502:10:5",
890
+ "typeDescriptions": {
891
+ "typeIdentifier": "t_address_payable",
892
+ "typeString": "address payable"
893
+ }
894
+ },
895
+ {
896
+ "argumentTypes": null,
897
+ "id": 1093,
898
+ "name": "uniswapV2Pair",
899
+ "nodeType": "Identifier",
900
+ "overloadedDeclarations": [],
901
+ "referencedDeclaration": 1072,
902
+ "src": "514:13:5",
903
+ "typeDescriptions": {
904
+ "typeIdentifier": "t_address",
905
+ "typeString": "address"
906
+ }
907
+ },
908
+ {
909
+ "argumentTypes": null,
910
+ "id": 1094,
911
+ "name": "index",
912
+ "nodeType": "Identifier",
913
+ "overloadedDeclarations": [],
914
+ "referencedDeclaration": 1074,
915
+ "src": "529:5:5",
916
+ "typeDescriptions": {
917
+ "typeIdentifier": "t_uint8",
918
+ "typeString": "uint8"
919
+ }
920
+ }
921
+ ],
922
+ "expression": {
923
+ "argumentTypes": [
924
+ {
925
+ "typeIdentifier": "t_address_payable",
926
+ "typeString": "address payable"
927
+ },
928
+ {
929
+ "typeIdentifier": "t_address",
930
+ "typeString": "address"
931
+ },
932
+ {
933
+ "typeIdentifier": "t_uint8",
934
+ "typeString": "uint8"
935
+ }
936
+ ],
937
+ "expression": {
938
+ "argumentTypes": null,
939
+ "id": 1089,
940
+ "name": "abi",
941
+ "nodeType": "Identifier",
942
+ "overloadedDeclarations": [],
943
+ "referencedDeclaration": 9805,
944
+ "src": "485:3:5",
945
+ "typeDescriptions": {
946
+ "typeIdentifier": "t_magic_abi",
947
+ "typeString": "abi"
948
+ }
949
+ },
950
+ "id": 1090,
951
+ "isConstant": false,
952
+ "isLValue": false,
953
+ "isPure": true,
954
+ "lValueRequested": false,
955
+ "memberName": "encodePacked",
956
+ "nodeType": "MemberAccess",
957
+ "referencedDeclaration": null,
958
+ "src": "485:16:5",
959
+ "typeDescriptions": {
960
+ "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
961
+ "typeString": "function () pure returns (bytes memory)"
962
+ }
963
+ },
964
+ "id": 1095,
965
+ "isConstant": false,
966
+ "isLValue": false,
967
+ "isPure": false,
968
+ "kind": "functionCall",
969
+ "lValueRequested": false,
970
+ "names": [],
971
+ "nodeType": "FunctionCall",
972
+ "src": "485:50:5",
973
+ "typeDescriptions": {
974
+ "typeIdentifier": "t_bytes_memory_ptr",
975
+ "typeString": "bytes memory"
976
+ }
977
+ }
978
+ ],
979
+ "expression": {
980
+ "argumentTypes": [
981
+ {
982
+ "typeIdentifier": "t_bytes_memory_ptr",
983
+ "typeString": "bytes memory"
984
+ }
985
+ ],
986
+ "id": 1088,
987
+ "name": "keccak256",
988
+ "nodeType": "Identifier",
989
+ "overloadedDeclarations": [],
990
+ "referencedDeclaration": 9812,
991
+ "src": "475:9:5",
992
+ "typeDescriptions": {
993
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
994
+ "typeString": "function (bytes memory) pure returns (bytes32)"
995
+ }
996
+ },
997
+ "id": 1096,
998
+ "isConstant": false,
999
+ "isLValue": false,
1000
+ "isPure": false,
1001
+ "kind": "functionCall",
1002
+ "lValueRequested": false,
1003
+ "names": [],
1004
+ "nodeType": "FunctionCall",
1005
+ "src": "475:61:5",
1006
+ "typeDescriptions": {
1007
+ "typeIdentifier": "t_bytes32",
1008
+ "typeString": "bytes32"
1009
+ }
1010
+ },
1011
+ "nodeType": "VariableDeclarationStatement",
1012
+ "src": "460:76:5"
1013
+ },
1014
+ {
1015
+ "externalReferences": [
1016
+ {
1017
+ "salt": {
1018
+ "declaration": 1087,
1019
+ "isOffset": false,
1020
+ "isSlot": false,
1021
+ "src": "617:4:5",
1022
+ "valueSize": 1
1023
+ }
1024
+ },
1025
+ {
1026
+ "borrowable": {
1027
+ "declaration": 1077,
1028
+ "isOffset": false,
1029
+ "isSlot": false,
1030
+ "src": "556:10:5",
1031
+ "valueSize": 1
1032
+ }
1033
+ },
1034
+ {
1035
+ "bytecode": {
1036
+ "declaration": 1080,
1037
+ "isOffset": false,
1038
+ "isSlot": false,
1039
+ "src": "606:8:5",
1040
+ "valueSize": 1
1041
+ }
1042
+ },
1043
+ {
1044
+ "bytecode": {
1045
+ "declaration": 1080,
1046
+ "isOffset": false,
1047
+ "isSlot": false,
1048
+ "src": "585:8:5",
1049
+ "valueSize": 1
1050
+ }
1051
+ }
1052
+ ],
1053
+ "id": 1098,
1054
+ "nodeType": "InlineAssembly",
1055
+ "operations": "{\n borrowable := create2(0, add(bytecode, 32), mload(bytecode), salt)\n}",
1056
+ "src": "541:86:5"
1057
+ }
1058
+ ]
1059
+ },
1060
+ "documentation": null,
1061
+ "id": 1100,
1062
+ "implemented": true,
1063
+ "kind": "function",
1064
+ "modifiers": [],
1065
+ "name": "deployBorrowable",
1066
+ "nodeType": "FunctionDefinition",
1067
+ "parameters": {
1068
+ "id": 1075,
1069
+ "nodeType": "ParameterList",
1070
+ "parameters": [
1071
+ {
1072
+ "constant": false,
1073
+ "id": 1072,
1074
+ "name": "uniswapV2Pair",
1075
+ "nodeType": "VariableDeclaration",
1076
+ "scope": 1100,
1077
+ "src": "323:21:5",
1078
+ "stateVariable": false,
1079
+ "storageLocation": "default",
1080
+ "typeDescriptions": {
1081
+ "typeIdentifier": "t_address",
1082
+ "typeString": "address"
1083
+ },
1084
+ "typeName": {
1085
+ "id": 1071,
1086
+ "name": "address",
1087
+ "nodeType": "ElementaryTypeName",
1088
+ "src": "323:7:5",
1089
+ "stateMutability": "nonpayable",
1090
+ "typeDescriptions": {
1091
+ "typeIdentifier": "t_address",
1092
+ "typeString": "address"
1093
+ }
1094
+ },
1095
+ "value": null,
1096
+ "visibility": "internal"
1097
+ },
1098
+ {
1099
+ "constant": false,
1100
+ "id": 1074,
1101
+ "name": "index",
1102
+ "nodeType": "VariableDeclaration",
1103
+ "scope": 1100,
1104
+ "src": "346:11:5",
1105
+ "stateVariable": false,
1106
+ "storageLocation": "default",
1107
+ "typeDescriptions": {
1108
+ "typeIdentifier": "t_uint8",
1109
+ "typeString": "uint8"
1110
+ },
1111
+ "typeName": {
1112
+ "id": 1073,
1113
+ "name": "uint8",
1114
+ "nodeType": "ElementaryTypeName",
1115
+ "src": "346:5:5",
1116
+ "typeDescriptions": {
1117
+ "typeIdentifier": "t_uint8",
1118
+ "typeString": "uint8"
1119
+ }
1120
+ },
1121
+ "value": null,
1122
+ "visibility": "internal"
1123
+ }
1124
+ ],
1125
+ "src": "322:36:5"
1126
+ },
1127
+ "returnParameters": {
1128
+ "id": 1078,
1129
+ "nodeType": "ParameterList",
1130
+ "parameters": [
1131
+ {
1132
+ "constant": false,
1133
+ "id": 1077,
1134
+ "name": "borrowable",
1135
+ "nodeType": "VariableDeclaration",
1136
+ "scope": 1100,
1137
+ "src": "377:18:5",
1138
+ "stateVariable": false,
1139
+ "storageLocation": "default",
1140
+ "typeDescriptions": {
1141
+ "typeIdentifier": "t_address",
1142
+ "typeString": "address"
1143
+ },
1144
+ "typeName": {
1145
+ "id": 1076,
1146
+ "name": "address",
1147
+ "nodeType": "ElementaryTypeName",
1148
+ "src": "377:7:5",
1149
+ "stateMutability": "nonpayable",
1150
+ "typeDescriptions": {
1151
+ "typeIdentifier": "t_address",
1152
+ "typeString": "address"
1153
+ }
1154
+ },
1155
+ "value": null,
1156
+ "visibility": "internal"
1157
+ }
1158
+ ],
1159
+ "src": "376:20:5"
1160
+ },
1161
+ "scope": 1101,
1162
+ "src": "297:334:5",
1163
+ "stateMutability": "nonpayable",
1164
+ "superFunction": 4931,
1165
+ "visibility": "external"
1166
+ }
1167
+ ],
1168
+ "scope": 1102,
1169
+ "src": "230:404:5"
1170
+ }
1171
+ ],
1172
+ "src": "0:634:5"
1173
+ },
1174
+ "compiler": {
1175
+ "name": "solc",
1176
+ "version": "0.5.16+commit.9c3226ce.Emscripten.clang"
1177
+ },
1178
+ "networks": {
1179
+ "3": {
1180
+ "events": {},
1181
+ "links": {},
1182
+ "address": "0x9825Efda416b41f3a4a17c5fFD0aEFAa7D6a2950",
1183
+ "transactionHash": "0xb34cb348cf536953c98dd5ec9d024a0c3bcbca494815491b1c817230b77ea060"
1184
+ }
1185
+ },
1186
+ "schemaVersion": "3.3.2",
1187
+ "updatedAt": "2021-01-09T21:19:45.618Z",
1188
+ "networkType": "ethereum",
1189
+ "devdoc": {
1190
+ "methods": {}
1191
+ },
1192
+ "userdoc": {
1193
+ "methods": {}
1194
+ }
1195
+ }