/* 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 { CErc20Behalf } from "../CErc20Behalf"; export class CErc20Behalf__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): CErc20Behalf { return super.attach(address) as CErc20Behalf; } connect(signer: Signer): CErc20Behalf__factory { return super.connect(signer) as CErc20Behalf__factory; } static connect( address: string, signerOrProvider: Signer | Provider ): CErc20Behalf { return new Contract(address, _abi, signerOrProvider) as CErc20Behalf; } } 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: "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: [ { 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: [ { internalType: "address", name: "borrower", type: "address", }, { internalType: "uint256", name: "borrowAmount", type: "uint256", }, ], name: "borrowInternalBehalf", outputs: [], stateMutability: "nonpayable", 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: "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: [ { 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: [ { internalType: "address", name: "minter", type: "address", }, { internalType: "uint256", name: "mintAmount", type: "uint256", }, ], name: "mintInternalBehalf", outputs: [], 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: "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: "address", name: "redeemer", type: "address", }, { internalType: "uint256", name: "redeemAmount", type: "uint256", }, ], name: "redeemInternalBehalf", outputs: [], 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", }, ]; const _bytecode = "0x608060405234801561001057600080fd5b50613bf4806100206000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c806373acee98116101de578063b2a02ff11161010f578063e9c714f2116100ad578063f851a4401161007c578063f851a4401461077e578063f8f9da2814610796578063fca7820b1461079e578063fe9c44ae146107b157600080fd5b8063e9c714f21461073d578063f2b3abbd14610745578063f3fdb15a14610758578063f5e3c4621461076b57600080fd5b8063c37f68e2116100e9578063c37f68e2146106ab578063c5ebeaec146106de578063db006a75146106f1578063dd62ed3e1461070457600080fd5b8063b2a02ff11461067d578063b71d1a0c14610690578063bd6d894d146106a357600080fd5b806399d8c1b41161017c578063a9059cbb11610156578063a9059cbb14610646578063a9f7659514610659578063aa5af0fd1461066c578063ae9d70b01461067557600080fd5b806399d8c1b414610618578063a0712d681461062b578063a6afed951461063e57600080fd5b8063852a12e3116101b8578063852a12e3146105e15780638f840ddd146105f457806395d89b41146105fd57806395dd91931461060557600080fd5b806373acee98146105b3578063787338b9146105bb5780637f1e06be146105ce57600080fd5b80633af9e669116102b8578063601a0bf1116102565780636c540baf116102305780636c540baf1461055b5780636f307dc31461056457806370a082311461057757806372605921146105a057600080fd5b8063601a0bf1146105325780636752e7021461054557806369ab32501461055357600080fd5b806342b15b911161029257806342b15b91146104f05780634576b5db1461050357806347bd3718146105165780635fe3b5671461051f57600080fd5b80633af9e669146104c25780633b1d21a2146104d55780633e941010146104dd57600080fd5b8063182df0f51161032557806323b872dd116102ff57806323b872dd146104525780632608f818146104655780632678224714610478578063313ce567146104a357600080fd5b8063182df0f5146104245780631a31d4651461042c5780631be195601461043f57600080fd5b80630e752702116103615780630e752702146103de578063173b9904146103ff57806317bfdfbc1461040857806318160ddd1461041b57600080fd5b8063028e8b9a1461038857806306fdde031461039d578063095ea7b3146103bb575b600080fd5b61039b610396366004613664565b6107b9565b005b6103a56107fc565b6040516103b291906136ce565b60405180910390f35b6103ce6103c93660046136e1565b61088a565b60405190151581526020016103b2565b6103f16103ec36600461370d565b6108f8565b6040519081526020016103b2565b6103f160085481565b6103f1610416366004613664565b61090b565b6103f1600d5481565b6103f1610967565b61039b61043a3660046137df565b610976565b61039b61044d366004613664565b610a0b565b6103ce610460366004613895565b610bd7565b6103f16104733660046136e1565b610c27565b60045461048b906001600160a01b031681565b6040516001600160a01b0390911681526020016103b2565b6003546104b09060ff1681565b60405160ff90911681526020016103b2565b6103f16104d0366004613664565b610c3c565b6103f1610c82565b6103f16104eb36600461370d565b610c8c565b61039b6104fe3660046136e1565b610c9d565b6103f1610511366004613664565b610cb6565b6103f1600b5481565b60055461048b906001600160a01b031681565b6103f161054036600461370d565b610e08565b6103f1666379da05b6000081565b6103f1600081565b6103f160095481565b60115461048b906001600160a01b031681565b6103f1610585366004613664565b6001600160a01b03166000908152600e602052604090205490565b61039b6105ae3660046137df565b610e47565b6103f1610e5f565b61039b6105c93660046136e1565b610ea9565b61039b6105dc366004613664565b610ebc565b6103f16105ef36600461370d565b610f93565b6103f1600c5481565b6103a5610f9e565b6103f1610613366004613664565b610fab565b61039b6106263660046138d6565b610fb6565b6103f161063936600461370d565b611211565b6103f161121c565b6103ce6106543660046136e1565b61140a565b61039b6106673660046136e1565b611459565b6103f1600a5481565b6103f161146c565b6103f161068b366004613895565b611504565b6103f161069e366004613664565b611553565b6103f16115e0565b6106be6106b9366004613664565b611630565b6040805194855260208501939093529183015260608201526080016103b2565b6103f16106ec36600461370d565b611671565b6103f16106ff36600461370d565b61167c565b6103f1610712366004613978565b6001600160a01b039182166000908152600f6020908152604080832093909416825291909152205490565b6103f1611687565b6103f1610753366004613664565b61178e565b60065461048b906001600160a01b031681565b6103f16107793660046139b1565b6117a2565b60035461048b9061010090046001600160a01b031681565b6103f16117b9565b6103f16107ac36600461370d565b61180c565b6103ce600181565b60035461010090046001600160a01b0316156107d457600080fd5b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60018054610809906139f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610835906139f3565b80156108825780601f1061085757610100808354040283529160200191610882565b820191906000526020600020905b81548152906001019060200180831161086557829003601f168201915b505050505081565b336000818152600f602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108e69087815260200190565b60405180910390a35060019392505050565b60006109038261184b565b506000919050565b6000805460ff166109375760405162461bcd60e51b815260040161092e90613a2e565b60405180910390fd5b6000805460ff1916905561094961121c565b5061095382610fab565b90506000805460ff19166001179055919050565b600061097161189c565b905090565b610984868686868686610fb6565b601180546001600160a01b0319166001600160a01b038916908117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa1580156109dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a019190613a52565b5050505050505050565b60035461010090046001600160a01b03163314610a825760405162461bcd60e51b815260206004820152602f60248201527f4345726332303a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b606482015260840161092e565b6011546001600160a01b0382811691161415610afb5760405162461bcd60e51b815260206004820152603260248201527f4345726332303a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b606482015260840161092e565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610b42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b669190613a52565b60035460405163a9059cbb60e01b81526001600160a01b03610100909204821660048201526024810183905291925083169063a9059cbb90604401600060405180830381600087803b158015610bbb57600080fd5b505af1158015610bcf573d6000803e3d6000fd5b505050505050565b6000805460ff16610bfa5760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff19168155610c1033868686611906565b1490506000805460ff191660011790559392505050565b6000610c338383611b34565b50600092915050565b6000806040518060200160405280610c526115e0565b90526001600160a01b0384166000908152600e6020526040902054909150610c7b908290611b86565b9392505050565b6000610971611ba6565b6000610c9782611c1b565b92915050565b610ca561121c565b50610cb282826000611c72565b5050565b60035460009061010090046001600160a01b03163314610ce95760405163d219dc1f60e01b815260040160405180910390fd5b60055460408051623f1ee960e11b815290516001600160a01b0392831692851691627e3dd29160048083019260209291908290030181865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613a6b565b610da35760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015260640161092e565b600580546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d91015b60405180910390a150600092915050565b6000805460ff16610e2b5760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff19169055610e3d61121c565b5061095382611f4f565b610e5687878787878787610976565b50505050505050565b6000805460ff16610e825760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff19169055610e9461121c565b5050600b546000805460ff1916600117905590565b610eb161121c565b50610cb2828261206a565b60035461010090046001600160a01b03163314610f315760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652061646d696e206d6179207365742074686520636f6d702d60448201526c6c696b652064656c656761746560981b606482015260840161092e565b6011546040516317066a5760e21b81526001600160a01b03838116600483015290911690635c19a95c90602401600060405180830381600087803b158015610f7857600080fd5b505af1158015610f8c573d6000803e3d6000fd5b5050505050565b600061090382612237565b60028054610809906139f3565b6000610c9782612288565b60035461010090046001600160a01b031633146110215760405162461bcd60e51b8152602060048201526024808201527f6f6e6c792061646d696e206d617920696e697469616c697a6520746865206d616044820152631c9ad95d60e21b606482015260840161092e565b6009541580156110315750600a54155b6110895760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b606482015260840161092e565b6007849055836110f45760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b606482015260840161092e565b60006110ff87610cb6565b9050801561114f5760405162461bcd60e51b815260206004820152601a60248201527f73657474696e6720636f6d7074726f6c6c6572206661696c6564000000000000604482015260640161092e565b43600955670de0b6b3a7640000600a55611168866122d2565b905080156111c35760405162461bcd60e51b815260206004820152602260248201527f73657474696e6720696e7465726573742072617465206d6f64656c206661696c604482015261195960f21b606482015260840161092e565b83516111d69060019060208701906135bc565b5082516111ea9060029060208601906135bc565b50506003805460ff90921660ff199283161790556000805490911660011790555050505050565b600061090382612447565b6009546000904390808214156112355760009250505090565b600061123f611ba6565b600b54600c54600a546006546040516315f2405360e01b81526004810186905260248101859052604481018490529495509293919290916000916001600160a01b0316906315f2405390606401602060405180830381865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190613a52565b905065048c273950008111156113255760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c79206869676800000000604482015260640161092e565b60006113318789613aa3565b9050600061134d60405180602001604052808581525083612486565b9050600061135b8288611b86565b905060006113698883613aba565b905060006113886040518060200160405280600854815250848a6124b7565b9050600061139785898a6124b7565b60098e9055600a819055600b849055600c839055604080518d815260208101879052908101829052606081018590529091507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b6000805460ff1661142d5760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916815561144333808686611906565b1490506000805460ff1916600117905592915050565b61146161121c565b50610cb282826124d8565b6006546000906001600160a01b031663b8168816611488611ba6565b600b54600c546008546040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa1580156114e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190613a52565b6000805460ff166115275760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561153d3385858561268e565b50600080805460ff191660011790559392505050565b60035460009061010090046001600160a01b0316331461158657604051635cb56c2b60e01b815260040160405180910390fd5b600480546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610df7565b6000805460ff166116035760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561161561121c565b5061161e610967565b90506000805460ff1916600117905590565b6001600160a01b0381166000908152600e6020526040812054819081908190819061165a87612288565b61166261189c565b93509350935093509193509193565b600061090382612907565b600061090382612946565b6004546000906001600160a01b0316331415806116a2575033155b156116c057604051631ba24f2960e21b815260040160405180910390fd5b60038054600480546001600160a01b03808216610100818102610100600160a81b0319871617968790556001600160a01b031990931690935560408051948390048216808652929095041660208401529290917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600454604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b600061179861121c565b50610c97826122d2565b60006117af848484612987565b5060009392505050565b6006546000906001600160a01b03166315f240536117d5611ba6565b600b54600c546040516001600160e01b031960e086901b1681526004810193909352602483019190915260448201526064016114c3565b6000805460ff1661182f5760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561184161121c565b5061095382612a65565b60005460ff1661186d5760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561187f61121c565b5061188b333383612b21565b50506000805460ff19166001179055565b600d54600090806118af57505060075490565b60006118b9611ba6565b90506000600c54600b54836118ce9190613aba565b6118d89190613aa3565b90506000836118ef670de0b6b3a764000084613ad2565b6118f99190613af1565b95945050505050565b5090565b6005546040516317b9b84b60e31b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092839291169063bdcdc258906084016020604051808303816000875af115801561196b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198f9190613a52565b905080156119b35760405163089d427760e11b81526004810182905260240161092e565b836001600160a01b0316856001600160a01b031614156119e657604051638cd22d1960e01b815260040160405180910390fd5b6000856001600160a01b0316876001600160a01b03161415611a0b5750600019611a33565b506001600160a01b038086166000908152600f60209081526040808320938a16835292905220545b6000611a3f8583613aa3565b6001600160a01b0388166000908152600e602052604081205491925090611a67908790613aa3565b6001600160a01b0388166000908152600e602052604081205491925090611a8f908890613aba565b6001600160a01b03808b166000908152600e6020526040808220869055918b1681522081905590506000198414611ae9576001600160a01b03808a166000908152600f60209081526040808320938e168352929052208390555b876001600160a01b0316896001600160a01b0316600080516020613b9f83398151915289604051611b1c91815260200190565b60405180910390a35060009998505050505050505050565b60005460ff16611b565760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff19169055611b6861121c565b50611b74338383612b21565b50506000805460ff1916600117905550565b600080611b938484612486565b9050611b9e81612cca565b949350505050565b6011546040516370a0823160e01b81523060048201526000916001600160a01b03169081906370a0823190602401602060405180830381865afa158015611bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c159190613a52565b91505090565b6000805460ff16611c3e5760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff19169055611c5061121c565b50611c5a82612ce2565b5050600090506000805460ff19166001179055919050565b811580611c7d575080155b611ce65760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b606482015260840161092e565b60006040518060200160405280611cfb61189c565b905290506000808415611d1c57849150611d158386611b86565b9050611d2c565b611d268484612d76565b91508390505b60055460405163eabe7d9160e01b81526000916001600160a01b03169063eabe7d9190611d619030908b908890600401613b13565b6020604051808303816000875af1158015611d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da49190613a52565b90508015611dc85760405163480f424760e01b81526004810182905260240161092e565b4360095414611dea576040516397b5cfcd60e01b815260040160405180910390fd5b81611df3611ba6565b1015611e12576040516391240a1b60e01b815260040160405180910390fd5b82600d54611e209190613aa3565b600d556001600160a01b0387166000908152600e6020526040902054611e47908490613aa3565b6001600160a01b0388166000908152600e6020526040902055611e6a8783612d94565b60405183815230906001600160a01b03891690600080516020613b9f8339815191529060200160405180910390a37fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929878385604051611ecb93929190613b37565b60405180910390a16005546040516351dff98960e01b81523060048201526001600160a01b0389811660248301526044820185905260648201869052909116906351dff98990608401600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b5050505050505050505050565b600354600090819061010090046001600160a01b03163314611f8457604051630f7e5e6d60e41b815260040160405180910390fd5b4360095414611fa657604051630dff50cb60e41b815260040160405180910390fd5b82611faf611ba6565b1015611fce57604051633345e99960e01b815260040160405180910390fd5b600c54831115611ff1576040516378d2980560e11b815260040160405180910390fd5b82600c54611fff9190613aa3565b600c8190556003549091506120229061010090046001600160a01b031684612d94565b7f3bad0c59cf2f06e7314077049f48a93578cd16f5ef92329f1dab1420a99c177e600360019054906101000a90046001600160a01b03168483604051610df793929190613b37565b60055460405163368f515360e21b81526000916001600160a01b03169063da3d454c9061209f90309087908790600401613b13565b6020604051808303816000875af11580156120be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e29190613a52565b905080156121065760405163918db40f60e01b81526004810182905260240161092e565b436009541461212857604051630e8d8c6160e21b815260040160405180910390fd5b81612131611ba6565b1015612150576040516348c2588160e01b815260040160405180910390fd5b600061215b84612288565b905060006121698483613aba565b9050600084600b5461217b9190613aba565b6001600160a01b0387166000908152601060205260409020838155600a54600190910155600b81905590506121b08686612d94565b6121de6040518060400160405280600c81526020016b7472616e7366657272696e6760a01b81525086612e7e565b604080516001600160a01b038816815260208101879052908101839052606081018290527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a1505050505050565b60005460ff166122595760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561226b61121c565b5061227833600083611c72565b506000805460ff19166001179055565b6001600160a01b038116600090815260106020526040812080546122af5750600092915050565b600a5481546000916122c091613ad2565b9050816001015481611b9e9190613af1565b600354600090819061010090046001600160a01b031633146123075760405163407fded560e01b815260040160405180910390fd5b436009541461232957604051630be2a5cb60e11b815260040160405180910390fd5b600660009054906101000a90046001600160a01b03169050826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561237f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a39190613a6b565b6123ef5760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c736500000000604482015260640161092e565b600680546001600160a01b0319166001600160a01b0385811691821790925560408051928416835260208301919091527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f9269101610df7565b60005460ff166124695760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561247b61121c565b5061227833826124d8565b60408051602081019091526000815260405180602001604052806124ae856000015185612ec3565b90529392505050565b6000806124c48585612486565b90506118f96124d282612cca565b84612ecf565b600554604051634ef4c3e160e01b81526000916001600160a01b031690634ef4c3e19061250d90309087908790600401613b13565b6020604051808303816000875af115801561252c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125509190613a52565b90508015612574576040516349abd4fd60e01b81526004810182905260240161092e565b4360095414612596576040516338d8859760e01b815260040160405180910390fd5b600060405180602001604052806125ab61189c565b9052905060006125bb8585612edb565b905060006125c98284612d76565b905080600d546125d99190613aba565b600d556001600160a01b0386166000908152600e6020526040902054612600908290613aba565b6001600160a01b0387166000908152600e60205260409081902091909155517f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f9061265090889085908590613b37565b60405180910390a16040518181526001600160a01b038716903090600080516020613b9f8339815191529060200160405180910390a3505050505050565b60055460405163d02f735160e01b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015260848201849052600092169063d02f73519060a4016020604051808303816000875af11580156126f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271c9190613a52565b90508015612740576040516363e00e3360e11b81526004810182905260240161092e565b836001600160a01b0316836001600160a01b0316141561277357604051633a94626760e11b815260040160405180910390fd5b6000612794836040518060200160405280666379da05b600008152506130b2565b905060006127a28285613aa3565b9050600060405180602001604052806127b961189c565b9052905060006127c98285611b86565b9050600081600c546127db9190613aba565b600c819055600d549091506127f1908690613aa3565b600d556001600160a01b0388166000908152600e6020526040902054612818908890613aa3565b6001600160a01b03808a166000908152600e602052604080822093909355908b1681522054612848908590613aba565b6001600160a01b03808b166000818152600e602052604090819020939093559151908a1690600080516020613b9f8339815191529061288a9088815260200190565b60405180910390a360405185815230906001600160a01b038a1690600080516020613b9f8339815191529060200160405180910390a37fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc53083836040516128f393929190613b37565b60405180910390a150505050505050505050565b60005460ff166129295760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561293b61121c565b50612278338261206a565b60005460ff166129685760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff1916905561297a61121c565b5061227833826000611c72565b60005460ff166129a95760405162461bcd60e51b815260040161092e90613a2e565b6000805460ff191690556129bb61121c565b506000816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156129fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a229190613a52565b90508015612a4657604051633eea49b760e11b81526004810182905260240161092e565b612a52338585856130d5565b50506000805460ff191660011790555050565b60035460009061010090046001600160a01b03163314612a9857604051631205b57b60e11b815260040160405180910390fd5b4360095414612aba57604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a7640000821115612ae35760405163717220f360e11b815260040160405180910390fd5b600880549083905560408051828152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101610df7565b600554604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283929116906324008a62906084016020604051808303816000875af1158015612b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612baa9190613a52565b90508015612bce57604051638c81362d60e01b81526004810182905260240161092e565b4360095414612bf05760405163c9021e2f60e01b815260040160405180910390fd5b6000612bfb85612288565b905060006000198514612c0e5784612c10565b815b90506000612c1e8883612edb565b90506000612c2c8285613aa3565b9050600082600b54612c3e9190613aa3565b6001600160a01b038a8116600081815260106020908152604091829020878155600a54600190910155600b8590558151938f168452830191909152810185905260608101849052608081018290529091507f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060a00160405180910390a1509098975050505050505050565b8051600090610c9790670de0b6b3a764000090613af1565b60008080804360095414612d0c576040516338acf79960e01b81526004810182905260240161092e565b612d163386612edb565b905080600c54612d269190613aba565b915081600c819055507fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5338284604051612d6293929190613b37565b60405180910390a160009590945092505050565b6000610c7b612d8d84670de0b6b3a7640000612ec3565b835161358f565b60115460405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905290911690819063a9059cbb90604401600060405180830381600087803b158015612de457600080fd5b505af1158015612df8573d6000803e3d6000fd5b5050505060003d60008114612e145760208114612e1e57600080fd5b6000199150612e2a565b60206000803e60005191505b5080612e785760405162461bcd60e51b815260206004820152601960248201527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000604482015260640161092e565b50505050565b610cb28282604051602401612e94929190613b58565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b17905261359b565b6000610c7b8284613ad2565b6000610c7b8284613aba565b6011546040516370a0823160e01b81523060048201526000916001600160a01b0316908190839082906370a0823190602401602060405180830381865afa158015612f2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4e9190613a52565b6040516323b872dd60e01b81529091506001600160a01b038316906323b872dd90612f8190899030908a90600401613b13565b600060405180830381600087803b158015612f9b57600080fd5b505af1158015612faf573d6000803e3d6000fd5b5050505060003d60008114612fcb5760208114612fd557600080fd5b6000199150612fe1565b60206000803e60005191505b508061302f5760405162461bcd60e51b815260206004820152601860248201527f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000604482015260640161092e565b6040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015613076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061309a9190613a52565b90506130a68382613aa3565b98975050505050505050565b6000670de0b6b3a76400006130cb848460000151612ec3565b610c7b9190613af1565b600554604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000921690635fc7e71e9060a4016020604051808303816000875af115801561313f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131639190613a52565b9050801561318757604051630a14d17960e11b81526004810182905260240161092e565b43600954146131a9576040516380965b1b60e01b815260040160405180910390fd5b43826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320c9190613a52565b1461322a57604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b0316141561325d57604051631bd1a62160e21b815260040160405180910390fd5b8261327b5760405163d29da7ef60e01b815260040160405180910390fd5b60001983141561329e57604051635982c5bb60e11b815260040160405180910390fd5b60006132ab868686612b21565b60055460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b906132e590309089908890600401613b13565b6040805180830381865afa158015613301573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133259190613b7a565b91509150600082146133955760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161092e565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa1580156133de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134029190613a52565b10156134505760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161092e565b6001600160a01b0385163014156134725761346d3089898461268e565b61352c565b60405163b2a02ff160e01b81526000906001600160a01b0387169063b2a02ff1906134a5908c908c908790600401613b13565b6020604051808303816000875af11580156134c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e89190613a52565b1461352c5760405162461bcd60e51b81526020600482015260146024820152731d1bdad95b881cd95a5e9d5c994819985a5b195960621b604482015260640161092e565b604080516001600160a01b038a811682528981166020830152818301869052871660608201526080810183905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a15050505050505050565b6000610c7b8284613af1565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b8280546135c8906139f3565b90600052602060002090601f0160209004810192826135ea5760008555613630565b82601f1061360357805160ff1916838001178555613630565b82800160010185558215613630579182015b82811115613630578251825591602001919060010190613615565b506119029291505b808211156119025760008155600101613638565b6001600160a01b038116811461366157600080fd5b50565b60006020828403121561367657600080fd5b8135610c7b8161364c565b6000815180845260005b818110156136a75760208185018101518683018201520161368b565b818111156136b9576000602083870101525b50601f01601f19169290920160200192915050565b602081526000610c7b6020830184613681565b600080604083850312156136f457600080fd5b82356136ff8161364c565b946020939093013593505050565b60006020828403121561371f57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261374d57600080fd5b813567ffffffffffffffff8082111561376857613768613726565b604051601f8301601f19908116603f0116810190828211818310171561379057613790613726565b816040528381528660208588010111156137a957600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff811681146137da57600080fd5b919050565b600080600080600080600060e0888a0312156137fa57600080fd5b87356138058161364c565b965060208801356138158161364c565b955060408801356138258161364c565b945060608801359350608088013567ffffffffffffffff8082111561384957600080fd5b6138558b838c0161373c565b945060a08a013591508082111561386b57600080fd5b506138788a828b0161373c565b92505061388760c089016137c9565b905092959891949750929550565b6000806000606084860312156138aa57600080fd5b83356138b58161364c565b925060208401356138c58161364c565b929592945050506040919091013590565b60008060008060008060c087890312156138ef57600080fd5b86356138fa8161364c565b9550602087013561390a8161364c565b945060408701359350606087013567ffffffffffffffff8082111561392e57600080fd5b61393a8a838b0161373c565b9450608089013591508082111561395057600080fd5b5061395d89828a0161373c565b92505061396c60a088016137c9565b90509295509295509295565b6000806040838503121561398b57600080fd5b82356139968161364c565b915060208301356139a68161364c565b809150509250929050565b6000806000606084860312156139c657600080fd5b83356139d18161364c565b92506020840135915060408401356139e88161364c565b809150509250925092565b600181811c90821680613a0757607f821691505b60208210811415613a2857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600060208284031215613a6457600080fd5b5051919050565b600060208284031215613a7d57600080fd5b81518015158114610c7b57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613ab557613ab5613a8d565b500390565b60008219821115613acd57613acd613a8d565b500190565b6000816000190483118215151615613aec57613aec613a8d565b500290565b600082613b0e57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039390931683526020830191909152604082015260600190565b604081526000613b6b6040830185613681565b90508260208301529392505050565b60008060408385031215613b8d57600080fd5b50508051602090910151909290915056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220f6374de65d78b931a4ec3411fb316eb3ef9b8d99ee0a73e2a923f5798eb40b2564736f6c634300080a0033";