/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, Contract, ContractFactory, Overrides } from "ethers"; import { Provider, TransactionRequest } from "@ethersproject/providers"; import type { CDaiDelegate } from "../CDaiDelegate"; export class CDaiDelegate__factory extends ContractFactory { constructor(signer?: Signer) { super(_abi, _bytecode, signer); } deploy( overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy(overrides || {}) as Promise; } getDeployTransaction( overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction(overrides || {}); } attach(address: string): CDaiDelegate { return super.attach(address) as CDaiDelegate; } connect(signer: Signer): CDaiDelegate__factory { return super.connect(signer) as CDaiDelegate__factory; } static connect( address: string, signerOrProvider: Signer | Provider ): CDaiDelegate { return new Contract(address, _abi, signerOrProvider) as CDaiDelegate; } } const _abi = [ { inputs: [], name: "AcceptAdminPendingAdminCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "actualAddAmount", type: "uint256", }, ], name: "AddReservesFactorFreshCheck", type: "error", }, { inputs: [], name: "BorrowCashNotAvailable", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "BorrowComptrollerRejection", type: "error", }, { inputs: [], name: "BorrowFreshnessCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateAccrueBorrowInterestFailed", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateAccrueCollateralInterestFailed", type: "error", }, { inputs: [], name: "LiquidateCloseAmountIsUintMax", type: "error", }, { inputs: [], name: "LiquidateCloseAmountIsZero", type: "error", }, { inputs: [], name: "LiquidateCollateralFreshnessCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateComptrollerRejection", type: "error", }, { inputs: [], name: "LiquidateFreshnessCheck", type: "error", }, { inputs: [], name: "LiquidateLiquidatorIsBorrower", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateRepayBorrowFreshFailed", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "LiquidateSeizeComptrollerRejection", type: "error", }, { inputs: [], name: "LiquidateSeizeLiquidatorIsBorrower", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "MintComptrollerRejection", type: "error", }, { inputs: [], name: "MintFreshnessCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "RedeemComptrollerRejection", type: "error", }, { inputs: [], name: "RedeemFreshnessCheck", type: "error", }, { inputs: [], name: "RedeemTransferOutNotPossible", type: "error", }, { inputs: [], name: "ReduceReservesAdminCheck", type: "error", }, { inputs: [], name: "ReduceReservesCashNotAvailable", type: "error", }, { inputs: [], name: "ReduceReservesCashValidation", type: "error", }, { inputs: [], name: "ReduceReservesFreshCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "RepayBorrowComptrollerRejection", type: "error", }, { inputs: [], name: "RepayBorrowFreshnessCheck", type: "error", }, { inputs: [], name: "SetComptrollerOwnerCheck", type: "error", }, { inputs: [], name: "SetInterestRateModelFreshCheck", type: "error", }, { inputs: [], name: "SetInterestRateModelOwnerCheck", type: "error", }, { inputs: [], name: "SetPendingAdminOwnerCheck", type: "error", }, { inputs: [], name: "SetReserveFactorAdminCheck", type: "error", }, { inputs: [], name: "SetReserveFactorBoundsCheck", type: "error", }, { inputs: [], name: "SetReserveFactorFreshCheck", type: "error", }, { inputs: [ { internalType: "uint256", name: "errorCode", type: "uint256", }, ], name: "TransferComptrollerRejection", type: "error", }, { inputs: [], name: "TransferNotAllowed", type: "error", }, { inputs: [], name: "TransferNotEnough", type: "error", }, { inputs: [], name: "TransferTooMuch", type: "error", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "cashPrior", type: "uint256", }, { indexed: false, internalType: "uint256", name: "interestAccumulated", type: "uint256", }, { indexed: false, internalType: "uint256", name: "borrowIndex", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBorrows", type: "uint256", }, ], name: "AccrueInterest", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "owner", type: "address", }, { indexed: true, internalType: "address", name: "spender", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Approval", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "borrower", type: "address", }, { indexed: false, internalType: "uint256", name: "borrowAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "accountBorrows", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBorrows", type: "uint256", }, ], name: "Borrow", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "liquidator", type: "address", }, { indexed: false, internalType: "address", name: "borrower", type: "address", }, { indexed: false, internalType: "uint256", name: "repayAmount", type: "uint256", }, { indexed: false, internalType: "address", name: "cTokenCollateral", type: "address", }, { indexed: false, internalType: "uint256", name: "seizeTokens", type: "uint256", }, ], name: "LiquidateBorrow", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "minter", type: "address", }, { indexed: false, internalType: "uint256", name: "mintAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "mintTokens", type: "uint256", }, ], name: "Mint", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "oldAdmin", type: "address", }, { indexed: false, internalType: "address", name: "newAdmin", type: "address", }, ], name: "NewAdmin", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "contract ComptrollerInterface", name: "oldComptroller", type: "address", }, { indexed: false, internalType: "contract ComptrollerInterface", name: "newComptroller", type: "address", }, ], name: "NewComptroller", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "contract InterestRateModel", name: "oldInterestRateModel", type: "address", }, { indexed: false, internalType: "contract InterestRateModel", name: "newInterestRateModel", type: "address", }, ], name: "NewMarketInterestRateModel", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "oldPendingAdmin", type: "address", }, { indexed: false, internalType: "address", name: "newPendingAdmin", type: "address", }, ], name: "NewPendingAdmin", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "uint256", name: "oldReserveFactorMantissa", type: "uint256", }, { indexed: false, internalType: "uint256", name: "newReserveFactorMantissa", type: "uint256", }, ], name: "NewReserveFactor", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "redeemer", type: "address", }, { indexed: false, internalType: "uint256", name: "redeemAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "redeemTokens", type: "uint256", }, ], name: "Redeem", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "payer", type: "address", }, { indexed: false, internalType: "address", name: "borrower", type: "address", }, { indexed: false, internalType: "uint256", name: "repayAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "accountBorrows", type: "uint256", }, { indexed: false, internalType: "uint256", name: "totalBorrows", type: "uint256", }, ], name: "RepayBorrow", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "benefactor", type: "address", }, { indexed: false, internalType: "uint256", name: "addAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "newTotalReserves", type: "uint256", }, ], name: "ReservesAdded", type: "event", }, { anonymous: false, inputs: [ { indexed: false, internalType: "address", name: "admin", type: "address", }, { indexed: false, internalType: "uint256", name: "reduceAmount", type: "uint256", }, { indexed: false, internalType: "uint256", name: "newTotalReserves", type: "uint256", }, ], name: "ReservesReduced", type: "event", }, { anonymous: false, inputs: [ { indexed: true, internalType: "address", name: "from", type: "address", }, { indexed: true, internalType: "address", name: "to", type: "address", }, { indexed: false, internalType: "uint256", name: "amount", type: "uint256", }, ], name: "Transfer", type: "event", }, { inputs: [], name: "NO_ERROR", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "_acceptAdmin", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "addAmount", type: "uint256", }, ], name: "_addReserves", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bytes", name: "data", type: "bytes", }, ], name: "_becomeImplementation", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "compLikeDelegatee", type: "address", }, ], name: "_delegateCompLikeTo", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "reduceAmount", type: "uint256", }, ], name: "_reduceReserves", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "_resignImplementation", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract ComptrollerInterface", name: "newComptroller", type: "address", }, ], name: "_setComptroller", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract InterestRateModel", name: "newInterestRateModel", type: "address", }, ], name: "_setInterestRateModel", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address payable", name: "newPendingAdmin", type: "address", }, ], name: "_setPendingAdmin", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "newReserveFactorMantissa", type: "uint256", }, ], name: "_setReserveFactor", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "accrualBlockNumber", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "accrueInterest", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "admin", outputs: [ { internalType: "address payable", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, { internalType: "address", name: "spender", type: "address", }, ], name: "allowance", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "spender", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "approve", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, ], name: "balanceOf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "owner", type: "address", }, ], name: "balanceOfUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "borrowAmount", type: "uint256", }, ], name: "borrow", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "borrowBalanceCurrent", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "borrowBalanceStored", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "borrowIndex", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "borrowRatePerBlock", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "comptroller", outputs: [ { internalType: "contract ComptrollerInterface", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "daiJoinAddress", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "decimals", outputs: [ { internalType: "uint8", name: "", type: "uint8", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "exchangeRateCurrent", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "exchangeRateStored", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "account", type: "address", }, ], name: "getAccountSnapshot", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getCash", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "implementation", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "underlying_", type: "address", }, { internalType: "address", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, { internalType: "uint8", name: "decimals_", type: "uint8", }, ], name: "init_", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "underlying_", type: "address", }, { internalType: "contract ComptrollerInterface", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, { internalType: "uint8", name: "decimals_", type: "uint8", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "contract ComptrollerInterface", name: "comptroller_", type: "address", }, { internalType: "contract InterestRateModel", name: "interestRateModel_", type: "address", }, { internalType: "uint256", name: "initialExchangeRateMantissa_", type: "uint256", }, { internalType: "string", name: "name_", type: "string", }, { internalType: "string", name: "symbol_", type: "string", }, { internalType: "uint8", name: "decimals_", type: "uint8", }, ], name: "initialize", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "interestRateModel", outputs: [ { internalType: "contract InterestRateModel", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "isCToken", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "repayAmount", type: "uint256", }, { internalType: "contract CTokenInterface", name: "cTokenCollateral", type: "address", }, ], name: "liquidateBorrow", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "mintAmount", type: "uint256", }, ], name: "mint", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "name", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "pendingAdmin", outputs: [ { internalType: "address payable", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "potAddress", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "protocolSeizeShareMantissa", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "redeemTokens", type: "uint256", }, ], name: "redeem", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "redeemAmount", type: "uint256", }, ], name: "redeemUnderlying", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "repayAmount", type: "uint256", }, ], name: "repayBorrow", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "repayAmount", type: "uint256", }, ], name: "repayBorrowBehalf", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "reserveFactorMantissa", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "liquidator", type: "address", }, { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "seizeTokens", type: "uint256", }, ], name: "seize", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "newAdmin", type: "address", }, ], name: "setInitialAdmin", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "supplyRatePerBlock", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "contract EIP20NonStandardInterface", name: "token", type: "address", }, ], name: "sweepToken", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "symbol", outputs: [ { internalType: "string", name: "", type: "string", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalBorrows", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalBorrowsCurrent", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "totalReserves", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "totalSupply", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "dst", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transfer", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "src", type: "address", }, { internalType: "address", name: "dst", type: "address", }, { internalType: "uint256", name: "amount", type: "uint256", }, ], name: "transferFrom", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "underlying", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "vatAddress", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, ]; const _bytecode = "0x608060405234801561001057600080fd5b50614621806100206000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806372605921116101e9578063b2a02ff11161010f578063e9c714f2116100ad578063f851a4401161007c578063f851a440146107cd578063f8f9da28146107e5578063fca7820b146107ed578063fe9c44ae1461080057600080fd5b8063e9c714f21461078c578063f2b3abbd14610794578063f3fdb15a146107a7578063f5e3c462146107ba57600080fd5b8063c37f68e2116100e9578063c37f68e2146106fa578063c5ebeaec1461072d578063db006a7514610740578063dd62ed3e1461075357600080fd5b8063b2a02ff1146106cc578063b71d1a0c146106df578063bd6d894d146106f257600080fd5b806395d89b4111610187578063a6afed9511610156578063a6afed95146106a0578063a9059cbb146106a8578063aa5af0fd146106bb578063ae9d70b0146106c457600080fd5b806395d89b411461065f57806395dd91931461066757806399d8c1b41461067a578063a0712d681461068d57600080fd5b8063852a12e3116101c3578063852a12e31461061d5780638a8df2e6146106305780638d925ccd146106435780638f840ddd1461065657600080fd5b806372605921146105ef57806373acee98146106025780637f1e06be1461060a57600080fd5b80633af9e669116102ce5780635fe3b5671161026c57806369ab32501161023b57806369ab3250146105a25780636c540baf146105aa5780636f307dc3146105b357806370a08231146105c657600080fd5b80635fe3b5671461055b578063601a0bf11461056e57806366ced602146105815780636752e7021461059457600080fd5b80634576b5db116102a85780634576b5db1461051957806347bd37181461052c57806356e67728146105355780635c60da1b1461054857600080fd5b80633af9e669146104eb5780633b1d21a2146104fe5780633e9410101461050657600080fd5b806318160ddd1161034657806323b872dd1161031557806323b872dd1461047b5780632608f8181461048e57806326782247146104a1578063313ce567146104cc57600080fd5b806318160ddd14610444578063182df0f51461044d5780631a31d465146104555780631be195601461046857600080fd5b80630e752702116103825780630e752702146103ff578063153ab50514610420578063173b99041461042857806317bfdfbc1461043157600080fd5b8063028e8b9a146103a957806306fdde03146103be578063095ea7b3146103dc575b600080fd5b6103bc6103b7366004613ff3565b610808565b005b6103c661084b565b6040516103d3919061405d565b60405180910390f35b6103ef6103ea366004614070565b6108d9565b60405190151581526020016103d3565b61041261040d36600461409c565b610949565b6040519081526020016103d3565b6103bc61095c565b61041260085481565b61041261043f366004613ff3565b610c17565b610412600d5481565b610412610c6a565b6103bc610463366004614177565b610c79565b6103bc610476366004613ff3565b610d0e565b6103ef61048936600461422d565b610eda565b61041261049c366004614070565b610f2a565b6004546104b4906001600160a01b031681565b6040516001600160a01b0390911681526020016103d3565b6003546104d99060ff1681565b60405160ff90911681526020016103d3565b6104126104f9366004613ff3565b610f3f565b610412610f85565b61041261051436600461409c565b610f8f565b610412610527366004613ff3565b610f9a565b610412600b5481565b6103bc61054336600461426e565b6110ec565b6012546104b4906001600160a01b031681565b6005546104b4906001600160a01b031681565b61041261057c36600461409c565b61118e565b6014546104b4906001600160a01b031681565b610412666379da05b6000081565b610412600081565b61041260095481565b6011546104b4906001600160a01b031681565b6104126105d4366004613ff3565b6001600160a01b03166000908152600e602052604090205490565b6103bc6105fd366004614177565b6111cd565b6104126111e5565b6103bc610618366004613ff3565b61122f565b61041261062b36600461409c565b611306565b6013546104b4906001600160a01b031681565b6015546104b4906001600160a01b031681565b610412600c5481565b6103c6611311565b610412610675366004613ff3565b61131e565b6103bc6106883660046142b7565b611329565b61041261069b36600461409c565b611584565b61041261158f565b6103ef6106b6366004614070565b611607565b610412600a5481565b610412611656565b6104126106da36600461422d565b6116ee565b6104126106ed366004613ff3565b61173d565b6104126117ca565b61070d610708366004613ff3565b61181a565b6040805194855260208501939093529183015260608201526080016103d3565b61041261073b36600461409c565b61185b565b61041261074e36600461409c565b611866565b610412610761366004614359565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b610412611871565b6104126107a2366004613ff3565b611978565b6006546104b4906001600160a01b031681565b6104126107c8366004614392565b61198c565b6003546104b49061010090046001600160a01b031681565b6104126119a3565b6104126107fb36600461409c565b6119f6565b6103ef600181565b60035461010090046001600160a01b03161561082357600080fd5b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60018054610858906143d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610884906143d4565b80156108d15780601f106108a6576101008083540402835291602001916108d1565b820191906000526020600020905b8154815290600101906020018083116108b457829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109359087815260200190565b60405180910390a360019150505b92915050565b600061095482611a35565b506000919050565b60035461010090046001600160a01b031633146109d65760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179206162616e646f6e20746865206960448201526c36b83632b6b2b73a30ba34b7b760991b60648201526084015b60405180910390fd5b60135460145460155460408051634fb3c66560e11b815290516001600160a01b039485169493841693909216918391639f678cca91600480830192602092919082900301816000875af1158015610a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a55919061440f565b506040516305f5d64360e11b81523060048201526000906001600160a01b03841690630bebac8690602401602060405180830381865afa158015610a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac1919061440f565b604051637f8661a160e01b8152600481018290529091506001600160a01b03841690637f8661a190602401600060405180830381600087803b158015610b0657600080fd5b505af1158015610b1a573d6000803e3d6000fd5b5050604051633612d9a360e11b8152306004820152600092506001600160a01b0385169150636c25b34690602401602060405180830381865afa158015610b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b89919061440f565b90506001600160a01b03851663ef693bed30610bb16b033b2e3c9fd0803ce80000008561443e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015b600060405180830381600087803b158015610bf857600080fd5b505af1158015610c0c573d6000803e3d6000fd5b505050505050505050565b6000805460ff16610c3a5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055610c4c61158f565b50610c568261131e565b90506000805460ff19166001179055919050565b6000610c74611a86565b905090565b610c87868686868686611329565b601180546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa158015610ce0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d04919061440f565b5050505050505050565b60035461010090046001600160a01b03163314610d855760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b60648201526084016109cd565b6011546001600160a01b0382811691161415610dfe5760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b60648201526084016109cd565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610e45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e69919061440f565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610ebe57600080fd5b505af1158015610ed2573d6000803e3d6000fd5b505050505050565b6000805460ff16610efd5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19168155610f1333868686611af0565b1490506000805460ff191660011790559392505050565b6000610f368383611d1e565b50600092915050565b6000806040518060200160405280610f556117ca565b90526001600160a01b0384166000908152600e6020526040902054909150610f7e908290611d70565b9392505050565b6000610c74611d90565b600061094382611e8c565b60035460009061010090046001600160a01b03163314610fcd5760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b9190614484565b6110875760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016109cd565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b60035461010090046001600160a01b031633146111645760405162461bcd60e51b815260206004820152603060248201527f6f6e6c79207468652061646d696e206d617920696e697469616c697a6520746860448201526f329034b6b83632b6b2b73a30ba34b7b760811b60648201526084016109cd565b6000808280602001905181019061117b91906144a6565b915091506111898282611ee3565b505050565b6000805460ff166111b15760405162461bcd60e51b81526004016109cd90614460565b6000805460ff191690556111c361158f565b50610c56826121eb565b6111dc87878787878787610c79565b50505050505050565b6000805460ff166112085760405162461bcd60e51b81526004016109cd90614460565b6000805460ff1916905561121a61158f565b5050600b546000805460ff1916600117905590565b60035461010090046001600160a01b031633146112a45760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b60648201526084016109cd565b6011546040516317066a5760e21b81526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b1580156112eb57600080fd5b505af11580156112ff573d6000803e3d6000fd5b5050505050565b600061095482612306565b60028054610858906143d4565b600061094382612357565b60035461010090046001600160a01b031633146113945760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b60648201526084016109cd565b6009541580156113a45750600a54155b6113fc5760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b60648201526084016109cd565b6007849055836114675760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b60648201526084016109cd565b600061147287610f9a565b905080156114c25760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c656400000000000060448201526064016109cd565b43600955670de0b6b3a7640000600a556114db866123a1565b905080156115365760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b60648201526084016109cd565b8351611549906001906020870190613f4b565b50825161155d906002906020860190613f4b565b50506003805460ff90921660ff199283161790556000805490911660011790555050505050565b600061095482612516565b60145460408051634fb3c66560e11b815290516000926001600160a01b031691639f678cca916004808301926020929190829003018187875af11580156115da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fe919061440f565b50610c74612555565b6000805460ff1661162a5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff1916815561164033808686611af0565b1490506000805460ff1916600117905592915050565b6006546000906001600160a01b031663b8168816611672611d90565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa1580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c74919061440f565b6000805460ff166117115760405162461bcd60e51b81526004016109cd90614460565b6000805460ff1916905561172733858585612743565b50600080805460ff191660011790559392505050565b60035460009061010090046001600160a01b0316331461177057604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991016110db565b6000805460ff166117ed5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff191690556117ff61158f565b50611808610c6a565b90506000805460ff1916600117905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061184487612357565b61184c611a86565b93509350935093509193509193565b6000610954826129bc565b6000610954826129fb565b6004546000906001600160a01b03163314158061188c575033155b156118aa57604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b600061198261158f565b50610943826123a1565b6000611999848484612a3c565b5060009392505050565b6006546000906001600160a01b03166315f240536119bf611d90565b600b54600c546040516001600160e01b031960e086901b1681526004810193909352602483019190915260448201526064016116ad565b6000805460ff16611a195760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055611a2b61158f565b50610c5682612b1a565b60005460ff16611a575760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055611a6961158f565b50611a75333383612bd6565b50506000805460ff19166001179055565b600d5460009080611a9957505060075490565b6000611aa3611d90565b90506000600c54600b5483611ab891906144d5565b611ac291906144ed565b9050600083611ad9670de0b6b3a764000084614504565b611ae3919061443e565b95945050505050565b5090565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af1158015611b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b79919061440f565b90508015611b9d5760405163089d427760e11b8152600481018290526024016109cd565b836001600160a01b0316856001600160a01b03161415611bd057604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b03161415611bf55750600019611c1d565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6000611c2985836144ed565b6001600160a01b0388166000908152600e602052604081205491925090611c519087906144ed565b6001600160a01b0388166000908152600e602052604081205491925090611c799088906144d5565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611cd3576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b03166000805160206145cc83398151915289604051611d0691815260200190565b60405180910390a35060009998505050505050505050565b60005460ff16611d405760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055611d5261158f565b50611d5e338383612bd6565b50506000805460ff1916600117905550565b600080611d7d8484612d7f565b9050611d8881612db0565b949350505050565b6014546040516305f5d64360e11b81523060048201526000916001600160a01b03169082908290630bebac8690602401602060405180830381865afa158015611ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e01919061440f565b90506b033b2e3c9fd0803ce8000000611e7b836001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e75919061440f565b83612dc8565b611e85919061443e565b9250505090565b6000805460ff16611eaf5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055611ec161158f565b50611ecb82612e27565b5050600090506000805460ff19166001179055919050565b600082905060008290506000826001600160a01b031663f4b9fa756040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611f2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f539190614523565b90506000836001600160a01b03166336569e776040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190614523565b6011549091506001600160a01b038381169116146120265760405162461bcd60e51b815260206004820152602260248201527f444149206d757374206265207468652073616d6520617320756e6465726c79696044820152616e6760f01b60648201526084016109cd565b601380546001600160a01b03199081166001600160a01b03898116918217909355601480548316898516179055601580549092168484161790915560405163095ea7b360e01b8152600481019190915260001960248201529083169063095ea7b390604401600060405180830381600087803b1580156120a557600080fd5b505af11580156120b9573d6000803e3d6000fd5b50506014546040516328ec8bf160e21b81526001600160a01b039182166004820152908416925063a3b22fc49150602401600060405180830381600087803b15801561210457600080fd5b505af1158015612118573d6000803e3d6000fd5b50506013546040516328ec8bf160e21b81526001600160a01b039182166004820152908416925063a3b22fc49150602401600060405180830381600087803b15801561216357600080fd5b505af1158015612177573d6000803e3d6000fd5b50505050826001600160a01b0316639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156121bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121df919061440f565b506111dc306000612ebb565b600354600090819061010090046001600160a01b0316331461222057604051630f7e5e6d60e41b815260040160405180910390fd5b436009541461224257604051630dff50cb60e41b815260040160405180910390fd5b8261224b611d90565b101561226a57604051633345e99960e01b815260040160405180910390fd5b600c5483111561228d576040516378d2980560e11b815260040160405180910390fd5b82600c5461229b91906144ed565b600c8190556003549091506122be9061010090046001600160a01b0316846131be565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b031684836040516110db93929190614540565b60005460ff166123285760405162461bcd60e51b81526004016109cd90614460565b6000805460ff1916905561233a61158f565b50612347336000836132f4565b506000805460ff19166001179055565b6001600160a01b0381166000908152601060205260408120805461237e5750600092915050565b600a54815460009161238f91614504565b9050816001015481611d88919061443e565b600354600090819061010090046001600160a01b031633146123d65760405163407fded560e01b815260040160405180910390fd5b43600954146123f857604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124729190614484565b6124be5760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c73650000000060448201526064016109cd565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92691016110db565b60005460ff166125385760405162461bcd60e51b81526004016109cd90614460565b6000805460ff1916905561254a61158f565b5061234733826135d1565b60095460009043908082141561256e5760009250505090565b6000612578611d90565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa1580156125e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612606919061440f565b905065048c2739500081111561265e5760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c7920686967680000000060448201526064016109cd565b600061266a87896144ed565b9050600061268660405180602001604052808581525083612d7f565b905060006126948288611d70565b905060006126a288836144d5565b905060006126c16040518060200160405280600854815250848a613787565b905060006126d085898a613787565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af11580156127ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d1919061440f565b905080156127f5576040516363e00e3360e11b8152600481018290526024016109cd565b836001600160a01b0316836001600160a01b0316141561282857604051633a94626760e11b815260040160405180910390fd5b6000612849836040518060200160405280666379da05b600008152506137a8565b9050600061285782856144ed565b90506000604051806020016040528061286e611a86565b90529050600061287e8285611d70565b9050600081600c5461289091906144d5565b600c819055600d549091506128a69086906144ed565b600d556001600160a01b0388166000908152600e60205260409020546128cd9088906144ed565b6001600160a01b03808a166000908152600e602052604080822093909355908b16815220546128fd9085906144d5565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a16906000805160206145cc8339815191529061293f9088815260200190565b60405180910390a360405185815230906001600160a01b038a16906000805160206145cc8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53083836040516129a893929190614540565b60405180910390a150505050505050505050565b60005460ff166129de5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff191690556129f061158f565b5061234733826137cb565b60005460ff16612a1d5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055612a2f61158f565b50612347338260006132f4565b60005460ff16612a5e5760405162461bcd60e51b81526004016109cd90614460565b6000805460ff19169055612a7061158f565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ad7919061440f565b90508015612afb57604051633eea49b760e11b8152600481018290526024016109cd565b612b0733858585613998565b50506000805460ff191660011790555050565b60035460009061010090046001600160a01b03163314612b4d57604051631205b57b60e11b815260040160405180910390fd5b4360095414612b6f57604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a7640000821115612b985760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f82146091016110db565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af1158015612c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5f919061440f565b90508015612c8357604051638c81362d60e01b8152600481018290526024016109cd565b4360095414612ca55760405163c9021e2f60e01b815260040160405180910390fd5b6000612cb085612357565b905060006000198514612cc35784612cc5565b815b90506000612cd38883612ebb565b90506000612ce182856144ed565b9050600082600b54612cf391906144ed565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b6040805160208101909152600081526040518060200160405280612da7856000015185613e52565b90529392505050565b805160009061094390670de0b6b3a76400009061443e565b6000811580612dec57508282612dde8183614504565b9250612dea908361443e565b145b6109435760405162461bcd60e51b815260206004820152600c60248201526b6d756c2d6f766572666c6f7760a01b60448201526064016109cd565b60008080804360095414612e51576040516338acf79960e01b8152600481018290526024016109cd565b612e5b3386612ebb565b905080600c54612e6b91906144d5565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5338284604051612ea793929190614540565b60405180910390a160009590945092505050565b6011546040516323b872dd60e01b81526000916001600160a01b031690819081906323b872dd90612ef490889030908990600401614561565b6020604051808303816000875af1158015612f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f379190614484565b612f8f5760405162461bcd60e51b8152602060048201526024808201527f756e6578706563746564204549502d3230207472616e7366657220696e2072656044820152633a3ab93760e11b60648201526084016109cd565b6013546014546015546040516370a0823160e01b815230600482018190526001600160a01b039485169487948116938116928692633b4da69f929091908716906370a0823190602401602060405180830381865afa158015612ff5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613019919061440f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561305f57600080fd5b505af1158015613073573d6000803e3d6000fd5b5050604051633612d9a360e11b8152306004820152600092506001600160a01b0384169150636c25b34690602401602060405180830381865afa1580156130be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130e2919061440f565b90506000836001600160a01b031663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613124573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613148919061440f565b613152908361443e565b60405163049878f360e01b8152600481018290529091506001600160a01b0385169063049878f390602401600060405180830381600087803b15801561319757600080fd5b505af11580156131ab573d6000803e3d6000fd5b509b9d9c50505050505050505050505050565b6013546014546040805163324abb3160e21b815290516001600160a01b03938416939092169160009161326291849163c92aecc49160048083019260209291908290030181865afa158015613217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061323b919061440f565b613251866b033b2e3c9fd0803ce8000000612dc8565b61325b919061443e565b6001613e5e565b604051637f8661a160e01b8152600481018290529091506001600160a01b03831690637f8661a190602401600060405180830381600087803b1580156132a757600080fd5b505af11580156132bb573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b038881166004830152602482018890528616925063ef693bed9150604401610bde565b8115806132ff575080155b6133685760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b60648201526084016109cd565b6000604051806020016040528061337d611a86565b90529050600080841561339e578491506133978386611d70565b90506133ae565b6133a88484613eab565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d91906133e39030908b908890600401614561565b6020604051808303816000875af1158015613402573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613426919061440f565b9050801561344a5760405163480f424760e01b8152600481018290526024016109cd565b436009541461346c576040516397b5cfcd60e01b815260040160405180910390fd5b81613475611d90565b1015613494576040516391240a1b60e01b815260040160405180910390fd5b82600d546134a291906144ed565b600d556001600160a01b0387166000908152600e60205260409020546134c99084906144ed565b6001600160a01b0388166000908152600e60205260409020556134ec87836131be565b60405183815230906001600160a01b038916906000805160206145cc8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a92987838560405161354d93929190614540565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b1580156135b057600080fd5b505af11580156135c4573d6000803e3d6000fd5b5050505050505050505050565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e19061360690309087908790600401614561565b6020604051808303816000875af1158015613625573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613649919061440f565b9050801561366d576040516349abd4fd60e01b8152600481018290526024016109cd565b436009541461368f576040516338d8859760e01b815260040160405180910390fd5b600060405180602001604052806136a4611a86565b9052905060006136b48585612ebb565b905060006136c28284613eab565b905080600d546136d291906144d5565b600d556001600160a01b0386166000908152600e60205260409020546136f99082906144d5565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f9061374990889085908590614540565b60405180910390a16040518181526001600160a01b0387169030906000805160206145cc8339815191529060200160405180910390a3505050505050565b6000806137948585612d7f565b9050611ae36137a282612db0565b84613ec9565b6000670de0b6b3a76400006137c1848460000151613e52565b610f7e919061443e565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c9061380090309087908790600401614561565b6020604051808303816000875af115801561381f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613843919061440f565b905080156138675760405163918db40f60e01b8152600481018290526024016109cd565b436009541461388957604051630e8d8c6160e21b815260040160405180910390fd5b81613892611d90565b10156138b1576040516348c2588160e01b815260040160405180910390fd5b60006138bc84612357565b905060006138ca84836144d5565b9050600084600b546138dc91906144d5565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b819055905061391186866131be565b61393f6040518060400160405280600c81526020016b7472616e7366657272696e6760a01b81525086613ed5565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af1158015613a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a26919061440f565b90508015613a4a57604051630a14d17960e11b8152600481018290526024016109cd565b4360095414613a6c576040516380965b1b60e01b815260040160405180910390fd5b43826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acf919061440f565b14613aed57604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b03161415613b2057604051631bd1a62160e21b815260040160405180910390fd5b82613b3e5760405163d29da7ef60e01b815260040160405180910390fd5b600019831415613b6157604051635982c5bb60e11b815260040160405180910390fd5b6000613b6e868686612bd6565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b90613ba890309089908890600401614561565b6040805180830381865afa158015613bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be89190614585565b9150915060008214613c585760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016109cd565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061440f565b1015613d135760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016109cd565b6001600160a01b038516301415613d3557613d3030898984612743565b613def565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff190613d68908c908c908790600401614561565b6020604051808303816000875af1158015613d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dab919061440f565b14613def5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b60448201526064016109cd565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6000610f7e8284614504565b600082613e6b83826144d5565b91508110156109435760405162461bcd60e51b815260206004820152600c60248201526b6164642d6f766572666c6f7760a01b60448201526064016109cd565b6000610f7e613ec284670de0b6b3a7640000613e52565b8351613f1e565b6000610f7e82846144d5565b613f1a8282604051602401613eeb9291906145a9565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b179052613f2a565b5050565b6000610f7e828461443e565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b828054613f57906143d4565b90600052602060002090601f016020900481019282613f795760008555613fbf565b82601f10613f9257805160ff1916838001178555613fbf565b82800160010185558215613fbf579182015b82811115613fbf578251825591602001919060010190613fa4565b50611aec9291505b80821115611aec5760008155600101613fc7565b6001600160a01b0381168114613ff057600080fd5b50565b60006020828403121561400557600080fd5b8135610f7e81613fdb565b6000815180845260005b818110156140365760208185018101518683018201520161401a565b81811115614048576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610f7e6020830184614010565b6000806040838503121561408357600080fd5b823561408e81613fdb565b946020939093013593505050565b6000602082840312156140ae57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156140e6576140e66140b5565b604051601f8501601f19908116603f0116810190828211818310171561410e5761410e6140b5565b8160405280935085815286868601111561412757600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261415257600080fd5b610f7e838335602085016140cb565b803560ff8116811461417257600080fd5b919050565b600080600080600080600060e0888a03121561419257600080fd5b873561419d81613fdb565b965060208801356141ad81613fdb565b955060408801356141bd81613fdb565b945060608801359350608088013567ffffffffffffffff808211156141e157600080fd5b6141ed8b838c01614141565b945060a08a013591508082111561420357600080fd5b506142108a828b01614141565b92505061421f60c08901614161565b905092959891949750929550565b60008060006060848603121561424257600080fd5b833561424d81613fdb565b9250602084013561425d81613fdb565b929592945050506040919091013590565b60006020828403121561428057600080fd5b813567ffffffffffffffff81111561429757600080fd5b8201601f810184136142a857600080fd5b611d88848235602084016140cb565b60008060008060008060c087890312156142d057600080fd5b86356142db81613fdb565b955060208701356142eb81613fdb565b945060408701359350606087013567ffffffffffffffff8082111561430f57600080fd5b61431b8a838b01614141565b9450608089013591508082111561433157600080fd5b5061433e89828a01614141565b92505061434d60a08801614161565b90509295509295509295565b6000806040838503121561436c57600080fd5b823561437781613fdb565b9150602083013561438781613fdb565b809150509250929050565b6000806000606084860312156143a757600080fd5b83356143b281613fdb565b92506020840135915060408401356143c981613fdb565b809150509250925092565b600181811c908216806143e857607f821691505b6020821081141561440957634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561442157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008261445b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b60006020828403121561449657600080fd5b81518015158114610f7e57600080fd5b600080604083850312156144b957600080fd5b82516144c481613fdb565b602084015190925061438781613fdb565b600082198211156144e8576144e8614428565b500190565b6000828210156144ff576144ff614428565b500390565b600081600019048311821515161561451e5761451e614428565b500290565b60006020828403121561453557600080fd5b8151610f7e81613fdb565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6000806040838503121561459857600080fd5b505080516020909101519092909150565b6040815260006145bc6040830185614010565b9050826020830152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201827984e00de06503b19d104a87c13501b1ecc2e46cbf84b6a04b48084e8168064736f6c634300080a0033";