{
  "_format": "hh-sol-artifact-1",
  "contractName": "BentoBoxMock",
  "sourceName": "contracts/mocks/BentoBoxMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "weth",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "masterContract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "cloneAddress",
          "type": "address"
        }
      ],
      "name": "LogDeploy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "LogDeposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "borrower",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "LogFlashLoan",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "protocol",
          "type": "address"
        }
      ],
      "name": "LogRegisterProtocol",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "masterContract",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "LogSetMasterContractApproval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LogStrategyDivest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LogStrategyInvest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LogStrategyLoss",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "LogStrategyProfit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IStrategy",
          "name": "strategy",
          "type": "address"
        }
      ],
      "name": "LogStrategyQueued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IStrategy",
          "name": "strategy",
          "type": "address"
        }
      ],
      "name": "LogStrategySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "targetPercentage",
          "type": "uint256"
        }
      ],
      "name": "LogStrategyTargetPercentage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "LogTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "masterContract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "LogWhiteListMasterContract",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "LogWithdraw",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "addProfit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "calls",
          "type": "bytes[]"
        },
        {
          "internalType": "bool",
          "name": "revertOnFail",
          "type": "bool"
        }
      ],
      "name": "batch",
      "outputs": [
        {
          "internalType": "bool[]",
          "name": "successes",
          "type": "bool[]"
        },
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IBatchFlashBorrower",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "receivers",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "batchFlashLoan",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "masterContract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bool",
          "name": "useCreate2",
          "type": "bool"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "internalType": "address",
          "name": "cloneAddress",
          "type": "address"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "shareOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IFlashBorrower",
          "name": "borrower",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "flashLoan",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "balance",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "maxChangeAmount",
          "type": "uint256"
        }
      ],
      "name": "harvest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "masterContractApproved",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "masterContractOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingStrategy",
      "outputs": [
        {
          "internalType": "contract IStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permitToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registerProtocol",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "masterContract",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "setMasterContractApproval",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "contract IStrategy",
          "name": "newStrategy",
          "type": "address"
        }
      ],
      "name": "setStrategy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "targetPercentage_",
          "type": "uint64"
        }
      ],
      "name": "setStrategyTargetPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "strategy",
      "outputs": [
        {
          "internalType": "contract IStrategy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "strategyData",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "strategyStartDate",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "targetPercentage",
          "type": "uint64"
        },
        {
          "internalType": "uint128",
          "name": "balance",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "roundUp",
          "type": "bool"
        }
      ],
      "name": "toAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "roundUp",
          "type": "bool"
        }
      ],
      "name": "toShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "name": "totals",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "elastic",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "base",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "tos",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "shares",
          "type": "uint256[]"
        }
      ],
      "name": "transferMultiple",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "direct",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "renounce",
          "type": "bool"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "masterContract",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "whitelistMasterContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelistedMasterContracts",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "token_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "shareOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60e06040523480156200001157600080fd5b506040516200489038038062004890833981016040819052620000349162000117565b600080546001600160a01b0319163390811782556040518392907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a34660a081905262000084816200009f565b6080525060601b6001600160601b03191660c052506200016b565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f8330604051602001620000fa949392919062000147565b604051602081830303815290604052805190602001209050919050565b60006020828403121562000129578081fd5b81516001600160a01b038116811462000140578182fd5b9392505050565b938452602084019290925260408301526001600160a01b0316606082015260800190565b60805160a05160c05160601c6146e6620001aa600039806106f052806109bd5280611f3252806121135250806110835250806110b852506146e66000f3fe6080604052600436106101e75760003560e01c80637c516e9411610102578063d2423b5111610095578063f1676d3711610064578063f1676d3714610580578063f18d03cc146105a0578063f483b3da146105c0578063f7888aec146105e0576101ee565b8063d2423b51146104fb578063da5139ca1461051c578063df23b45b1461053c578063e30c39781461056b576101ee565b806397da6d30116100d157806397da6d3014610486578063aee4d1b2146104a6578063bafe4f14146104bb578063c0a47c93146104db576101ee565b80637c516e94146104115780637ecebe00146104315780638da5cb5b1461045157806391e0eab514610466576101ee565b80633e2a9d4e1161017a5780635662311811610149578063566231181461039157806366c6bb0b146103b157806372cb5d97146103d1578063733a9d7c146103f1576101ee565b80633e2a9d4e1461030e5780634e71e0c81461032e5780634ffe34db146103435780635108a55814610371576101ee565b80631583d56c116101b65780631583d56c1461028c5780631f54245b146102ac578063228bfd9f146102cc5780633644e515146102ec576101ee565b806302b9446c146101f3578063078dfbe71461021d5780630fca88431461023f57806312a90c8a1461025f576101ee565b366101ee57005b600080fd5b6102066102013660046137f7565b610600565b6040516102149291906145bc565b60405180910390f35b34801561022957600080fd5b5061023d6102383660046135ae565b610ac4565b005b34801561024b57600080fd5b5061023d61025a3660046138d2565b610baa565b34801561026b57600080fd5b5061027f61027a3660046134c1565b610e5b565b6040516102149190613e8a565b34801561029857600080fd5b5061023d6102a73660046139a3565b610e70565b6102bf6102ba3660046135f8565b610ea7565b6040516102149190613c55565b3480156102d857600080fd5b506102bf6102e73660046134c1565b611063565b3480156102f857600080fd5b5061030161107e565b6040516102149190613e95565b34801561031a57600080fd5b5061023d610329366004613a04565b6110de565b34801561033a57600080fd5b5061023d6111a9565b34801561034f57600080fd5b5061036361035e3660046134c1565b611236565b6040516102149291906145a2565b34801561037d57600080fd5b506102bf61038c3660046134c1565b61125c565b34801561039d57600080fd5b506103016103ac3660046139ce565b611277565b3480156103bd57600080fd5b5061023d6103cc366004613963565b6112cb565b3480156103dd57600080fd5b5061023d6103ec366004613795565b611894565b3480156103fd57600080fd5b5061023d61040c366004613581565b611cf2565b34801561041d57600080fd5b5061023d61042c366004613851565b611d96565b34801561043d57600080fd5b5061030161044c3660046134c1565b611e0a565b34801561045d57600080fd5b506102bf611e1c565b34801561047257600080fd5b5061027f6104813660046134dd565b611e2b565b34801561049257600080fd5b506102066104a13660046137f7565b611e4b565b3480156104b257600080fd5b5061023d61225f565b3480156104c757600080fd5b506102bf6104d63660046134c1565b6122a6565b3480156104e757600080fd5b5061023d6104f6366004613515565b6122c1565b61050e61050936600461365d565b6125d0565b604051610214929190613df0565b34801561052857600080fd5b506103016105373660046139ce565b612760565b34801561054857600080fd5b5061055c6105573660046134c1565b6127ac565b604051610214939291906145de565b34801561057757600080fd5b506102bf6127e5565b34801561058c57600080fd5b5061023d61059b366004613a3c565b6127f4565b3480156105ac57600080fd5b5061023d6105bb3660046137a7565b612945565b3480156105cc57600080fd5b5061023d6105db3660046136c2565b612ae9565b3480156105ec57600080fd5b506103016105fb366004613795565b612da9565b600080856001600160a01b038116331480159061062657506001600160a01b0381163014155b156106b157336000908152600260205260409020546001600160a01b03168061066a5760405162461bcd60e51b8152600401610661906143b8565b60405180910390fd5b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff166106af5760405162461bcd60e51b81526004016106619061423b565b505b6001600160a01b0386166106d75760405162461bcd60e51b815260040161066190614198565b60006001600160a01b038916156106ee5788610710565b7f00000000000000000000000000000000000000000000000000000000000000005b905061071a6133e7565b506001600160a01b0381166000908152600760209081526040918290208251808401909352546001600160801b03808216808552600160801b90920416918301919091521515806107db57506000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d99190613aac565b115b6107f75760405162461bcd60e51b8152600401610661906140bc565b8561084f5761080881886000612dc6565b95506103e861082d61081988612e60565b60208401516001600160801b031690612e8d565b6001600160801b0316101561084a57600080945094505050610ab9565b61085e565b61085b81876001612ec2565b96505b6001600160a01b0389163014158061087d57506001600160a01b038a16155b806108a5575080516108a1906001600160801b031661089b84612f41565b90612fe9565b8711155b6108c15760405162461bcd60e51b815260040161066190613f72565b6001600160a01b038083166000908152600660209081526040808320938c16835292905220546108f1908761300c565b6001600160a01b038084166000908152600660209081526040808320938d168352929052205561093761092387612e60565b60208301516001600160801b031690612e8d565b6001600160801b0316602082015261096261095188612e60565b82516001600160801b031690612e8d565b6001600160801b0390811682526001600160a01b03808416600090815260076020908152604090912084518154928601518516600160801b029085166001600160801b031990931692909217909316179091558a16610a34577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b5050505050610a59565b6001600160a01b0389163014610a5957610a596001600160a01b0383168a308a61302f565b876001600160a01b0316896001600160a01b0316836001600160a01b03167fb2346165e782564f17f5b7e555c21f4fd96fbc93458572bf0113ea35a958fc558a8a604051610aa89291906145bc565b60405180910390a486945085935050505b509550959350505050565b6000546001600160a01b03163314610aee5760405162461bcd60e51b815260040161066190614206565b8115610b89576001600160a01b038316151580610b085750805b610b245760405162461bcd60e51b815260040161066190614085565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610ba5565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b846001600160a01b0381163314801590610bcd57506001600160a01b0381163014155b15610c4f57336000908152600260205260409020546001600160a01b031680610c085760405162461bcd60e51b8152600401610661906143b8565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff16610c4d5760405162461bcd60e51b81526004016106619061423b565b505b600085858281610c5b57fe5b9050602002016020810190610c7091906134c1565b6001600160a01b03161415610c975760405162461bcd60e51b815260040161066190614161565b600084815b81811015610df3576000888883818110610cb257fe5b9050602002016020810190610cc791906134c1565b9050610d36878784818110610cd857fe5b90506020020135600660008e6001600160a01b03166001600160a01b031681526020019081526020016000206000846001600160a01b03166001600160a01b031681526020019081526020016000205461300c90919063ffffffff16565b6001600160a01b03808d16600090815260066020908152604080832093861683529290522055610d81878784818110610d6b57fe5b905060200201358561300c90919063ffffffff16565b9350806001600160a01b03168a6001600160a01b03168c6001600160a01b03167f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a8a8a87818110610dce57fe5b90506020020135604051610de29190613e95565b60405180910390a450600101610c9c565b506001600160a01b03808a166000908152600660209081526040808320938c1683529290522054610e249083612fe9565b6001600160a01b03998a1660009081526006602090815260408083209b909c16825299909952989097209790975550505050505050565b60046020526000908152604090205460ff1681565b610e856001600160a01b03831633308461302f565b6001600160a01b0382166000908152600760205260409020610ba59082613128565b60006001600160a01b038516610ecf5760405162461bcd60e51b81526004016106619061434c565b606085901b8215610f415760008585604051610eec929190613bff565b60405180910390209050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260148201526e5af43d82803e903d91602b57fd5bf360881b6028820152816037826000f593505050610f86565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09250505b6001600160a01b038281166000818152600260205260409081902080546001600160a01b031916938a16939093179092559051631377d1f560e21b8152634ddf47d4903490610fdb9089908990600401613f14565b6000604051808303818588803b158015610ff457600080fd5b505af1158015611008573d6000803e3d6000fd5b5050505050816001600160a01b0316866001600160a01b03167fd62166f3c2149208e51788b1401cc356bf5da1fc6c7886a32e18570f57d88b3b8787604051611052929190613f14565b60405180910390a350949350505050565b6008602052600090815260409020546001600160a01b031681565b6000467f000000000000000000000000000000000000000000000000000000000000000081146110b6576110b18161316c565b6110d8565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6000546001600160a01b031633146111085760405162461bcd60e51b815260040161066190614206565b605f816001600160401b031611156111325760405162461bcd60e51b815260040161066190614537565b6001600160a01b0382166000818152600a602052604090819020805467ffffffffffffffff60401b1916600160401b6001600160401b03861602179055517f7543af99b5602c06e62da0631b5308489a5ff859150105a623b6eb15e8deae0b9061119d9084906145ca565b60405180910390a25050565b6001546001600160a01b03163381146111d45760405162461bcd60e51b815260040161066190614272565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6007602052600090815260409020546001600160801b0380821691600160801b90041682565b6009602052600090815260409020546001600160a01b031681565b6001600160a01b03831660009081526007602090815260408083208151808301909252546001600160801b038082168352600160801b90910416918101919091526112c3908484612ec2565b949350505050565b6112d36133fe565b506001600160a01b038381166000818152600a60209081526040808320815160608101835290546001600160401b038082168352600160401b82041682850152600160801b90046001600160801b031681830190815294845260089092528083205493519051630c7e663b60e11b81529194939093169283916318fccc7691611360913390600401614580565b602060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190613aac565b9050801580156113c0575084155b156113cd57505050610ba5565b6001600160a01b0386166000908152600760205260408120546001600160801b0316908213156114835781611402828261300c565b915061140d82612e60565b6001600160a01b0389166000818152600760205260409081902080546001600160801b0319166001600160801b03949094169390931790925590517f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d290611475908490613e95565b60405180910390a250611551565b600082121561155157600082900361149b8282612fe9565b91506114a682612e60565b6001600160a01b038916600090815260076020526040902080546001600160801b0319166001600160801b03929092169190911790556114fc6114e882612e60565b60408701516001600160801b0316906131e3565b6001600160801b0316604080870191909152516001600160a01b038916907f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9790611547908490613e95565b60405180910390a2505b8515611810576000606461157b86602001516001600160401b03168461321290919063ffffffff16565b8161158257fe5b0490508085604001516001600160801b031610156116bd5760006115bc86604001516001600160801b031683612fe990919063ffffffff16565b905086158015906115cc57508681115b156115d45750855b6115e86001600160a01b038a168683613249565b6116086115f482612e60565b60408801516001600160801b031690612e8d565b6001600160801b031660408088019190915251636939aaf560e01b81526001600160a01b03861690636939aaf590611644908490600401613e95565b600060405180830381600087803b15801561165e57600080fd5b505af1158015611672573d6000803e3d6000fd5b50505050886001600160a01b03167fb18e7e4f6eac147a63a3bb6beb2d9039c88698623aff3efc4febbc20b0164ee5826040516116af9190613e95565b60405180910390a25061180e565b8085604001516001600160801b0316111561180e5760006116f46116e083612e60565b60408801516001600160801b0316906131e3565b6001600160801b03169050861580159061170d57508681115b156117155750855b604051632e1a7d4d60e01b81526000906001600160a01b03871690632e1a7d4d90611744908590600401613e95565b602060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117969190613aac565b90506117b86117a482612e60565b60408901516001600160801b0316906131e3565b6001600160801b0316604080890191909152516001600160a01b038b16907f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a90611803908490613e95565b60405180910390a250505b505b5050506001600160a01b0384166000908152600a6020908152604091829020835181549285015193909401516001600160801b03908116600160801b026001600160401b03948516600160401b0267ffffffffffffffff60401b199590961667ffffffffffffffff1990941693909317939093169390931791909116179055505050565b6000546001600160a01b031633146118be5760405162461bcd60e51b815260040161066190614206565b6118c66133fe565b506001600160a01b038281166000818152600a60209081526040808320815160608101835290546001600160401b038082168352600160401b8204811683860152600160801b9091046001600160801b03168284015294845260099092529091205481519193169116158061194d5750826001600160a01b0316816001600160a01b031614155b156119d7576001600160a01b03848116600090815260096020526040902080546001600160a01b03191691851691909117905561198e62127500420161333f565b6001600160401b031682526040516001600160a01b0380851691908616907f6f7ccdf3f86039e5a1dcf6028bf7b4773cbf7a234716ba2e5392b12bb0f8558f90600090a3611c72565b81516001600160401b0316158015906119fa575081516001600160401b03164210155b611a165760405162461bcd60e51b8152600401610661906141cf565b6001600160a01b038481166000908152600860205260409020541615611bfb576001600160a01b0380851660009081526008602052604080822054858201519151637f8661a160e01b815292931691637f8661a191611a779160040161456c565b602060405180830381600087803b158015611a9157600080fd5b505af1158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190613aac565b90506000811315611b40576001600160a01b03851660009081526007602052604090208190611af89082613128565b50856001600160a01b03167f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d282604051611b329190613e95565b60405180910390a250611bb4565b6000811215611bb4576001600160a01b03851660009081526007602052604081209082900390611b709082613368565b50856001600160a01b03167f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9782604051611baa9190613e95565b60405180910390a2505b846001600160a01b03167f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a8460400151604051611bf1919061456c565b60405180910390a2505b6001600160a01b03808516600081815260086020908152604080832080548688166001600160a01b0319918216179091558388528782018490528484526009909252808320805490921690915551928616927f03e6352a885adc4cc54767592939c3b1bbd65685658c3beaaba66a888120e2179190a35b506001600160a01b03929092166000908152600a60209081526040918290208451815492860151939095015167ffffffffffffffff199092166001600160401b039586161767ffffffffffffffff60401b1916600160401b9590931694909402919091176001600160801b03908116600160801b91909216021790915550565b6000546001600160a01b03163314611d1c5760405162461bcd60e51b815260040161066190614206565b6001600160a01b038216611d425760405162461bcd60e51b815260040161066190613fa9565b6001600160a01b03821660008181526004602052604090819020805460ff1916841515179055517f31a1e0eac44b54ac6c2a2efa87e92c83405ffcf33fceef02a7bca695130e26009061119d908490613e8a565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611dce908a908a908a908a908a908a908a90600401613d96565b600060405180830381600087803b158015611de857600080fd5b505af1158015611dfc573d6000803e3d6000fd5b505050505050505050505050565b60056020526000908152604090205481565b6000546001600160a01b031681565b600360209081526000928352604080842090915290825290205460ff1681565b600080856001600160a01b0381163314801590611e7157506001600160a01b0381163014155b15611ef357336000908152600260205260409020546001600160a01b031680611eac5760405162461bcd60e51b8152600401610661906143b8565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff16611ef15760405162461bcd60e51b81526004016106619061423b565b505b6001600160a01b038616611f195760405162461bcd60e51b815260040161066190614198565b60006001600160a01b03891615611f305788611f52565b7f00000000000000000000000000000000000000000000000000000000000000005b9050611f5c6133e7565b506001600160a01b0381166000908152600760209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015285611fb457611fad81886001612dc6565b9550611fc3565b611fc081876000612ec2565b96505b6001600160a01b038083166000908152600660209081526040808320938d1683529290522054611ff39087612fe9565b6001600160a01b038084166000908152600660209081526040808320938e168352929052205561203661202588612e60565b82516001600160801b0316906131e3565b6001600160801b0316815261206161204d87612e60565b60208301516001600160801b0316906131e3565b6001600160801b0316602082018190526103e811158061208c575060208101516001600160801b0316155b6120a85760405162461bcd60e51b81526004016106619061404e565b6001600160a01b03828116600090815260076020908152604090912083518154928501516001600160801b03199093166001600160801b03918216178116600160801b91909316029190911790558a166121fc57604051632e1a7d4d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90612148908a90600401613e95565b600060405180830381600087803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b505050506000886001600160a01b03168860405161219390613c52565b60006040518083038185875af1925050503d80600081146121d0576040519150601f19603f3d011682016040523d82523d6000602084013e6121d5565b606091505b50509050806121f65760405162461bcd60e51b8152600401610661906144c9565b50612210565b6122106001600160a01b0383168989613249565b876001600160a01b0316896001600160a01b0316836001600160a01b03167fad9ab9ee6953d4d177f4a03b3a3ac3178ffcb9816319f348060194aa76b144868a8a604051610aa89291906145bc565b3360008181526002602052604080822080546001600160a01b03191684179055517fdfb44ffabf0d3a8f650d3ce43eff98f6d050e7ea1a396d5794f014e7dadabacb9190a2565b6002602052600090815260409020546001600160a01b031681565b6001600160a01b0385166122e75760405162461bcd60e51b815260040161066190614381565b811580156122f3575080155b8015612300575060ff8316155b156123a2576001600160a01b038616331461232d5760405162461bcd60e51b815260040161066190613fe0565b6001600160a01b0386811660009081526002602052604090205416156123655760405162461bcd60e51b8152600401610661906142de565b6001600160a01b03851660009081526004602052604090205460ff1661239d5760405162461bcd60e51b815260040161066190614492565b61255c565b6001600160a01b0386166123c85760405162461bcd60e51b815260040161066190614424565b600060405180604001604052806002815260200161190160f01b8152506123ed61107e565b7f1962bc9f5484cb7a998701b81090e966ee1fce5771af884cceee7c081b14ade287612439577fb426802f1f7dc850a7b6b38805edea2442f3992878a9ab985abfe8091d95d0b161245b565b7f422ac5323fe049241dee67716229a1cc1bc7b313b23dfe3ef6d42ab177a3b2845b6001600160a01b038b1660009081526005602090815260409182902080546001810190915591516124959493928e928e928e929101613e9e565b604051602081830303815290604052805190602001206040516020016124bd93929190613c2b565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516124fa9493929190613ef6565b6020604051602081039080840390855afa15801561251c573d6000803e3d6000fd5b505050602060405103519050876001600160a01b0316816001600160a01b0316146125595760405162461bcd60e51b815260040161066190614315565b50505b6001600160a01b038581166000818152600360209081526040808320948b168084529490915290819020805460ff1916881515179055517f5f6ebb64ba012a851c6f014e6cad458ddf213d1512049b31cd06365c2b059257906125c0908890613e8a565b60405180910390a3505050505050565b606080836001600160401b03811180156125e957600080fd5b50604051908082528060200260200182016040528015612613578160200160208202803683370190505b509150836001600160401b038111801561262c57600080fd5b5060405190808252806020026020018201604052801561266057816020015b606081526020019060019003908161264b5790505b50905060005b8481101561275757600060603088888581811061267f57fe5b9050602002810190612691919061460a565b60405161269f929190613bff565b600060405180830381855af49150503d80600081146126da576040519150601f19603f3d011682016040523d82523d6000602084013e6126df565b606091505b509150915081806126ee575085155b6126f782613387565b906127155760405162461bcd60e51b81526004016106619190613f28565b508185848151811061272357fe5b6020026020010190151590811515815250508084848151811061274257fe5b60209081029190910101525050600101612666565b50935093915050565b6001600160a01b03831660009081526007602090815260408083208151808301909252546001600160801b038082168352600160801b90910416918101919091526112c3908484612dc6565b600a602052600090815260409020546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b6001546001600160a01b031681565b6000620186a0612805856032613212565b8161280c57fe5b0490506128236001600160a01b0386168786613249565b6040516323e30c8b60e01b81526001600160a01b038816906323e30c8b906128599033908990899087908a908a90600401613d2d565b600060405180830381600087803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505050506128be61289782612e60565b6001600160a01b0387166000908152600760205260409020906001600160801b0316613128565b6128c786612f41565b10156128e55760405162461bcd60e51b81526004016106619061445b565b856001600160a01b0316856001600160a01b0316886001600160a01b03167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a22320487856040516129349291906145bc565b60405180910390a450505050505050565b826001600160a01b038116331480159061296857506001600160a01b0381163014155b156129ea57336000908152600260205260409020546001600160a01b0316806129a35760405162461bcd60e51b8152600401610661906143b8565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff166129e85760405162461bcd60e51b81526004016106619061423b565b505b6001600160a01b038316612a105760405162461bcd60e51b815260040161066190614198565b6001600160a01b03808616600090815260066020908152604080832093881683529290522054612a409083612fe9565b6001600160a01b03868116600090815260066020908152604080832089851684529091528082209390935590851681522054612a7c908361300c565b6001600160a01b0380871660008181526006602090815260408083208986168085529252918290209490945551918716917f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a90612ada908790613e95565b60405180910390a45050505050565b6060856001600160401b0381118015612b0157600080fd5b50604051908082528060200260200182016040528015612b2b578160200160208202803683370190505b5090508560005b81811015612bfa576000878783818110612b4857fe5b905060200201359050620186a0612b6960328361321290919063ffffffff16565b81612b7057fe5b04848381518110612b7d57fe5b602002602001018181525050612bf18c8c84818110612b9857fe5b9050602002016020810190612bad91906134c1565b898985818110612bb957fe5b905060200201358c8c86818110612bcc57fe5b9050602002016020810190612be191906134c1565b6001600160a01b03169190613249565b50600101612b32565b5060405163d9d1762360e01b81526001600160a01b038c169063d9d1762390612c359033908c908c908c908c908a908d908d90600401613c69565b600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b5050505060005b81811015611dfc576000898983818110612c8057fe5b9050602002016020810190612c9591906134c1565b9050612cdd612cb6858481518110612ca957fe5b6020026020010151612e60565b6001600160a01b0383166000908152600760205260409020906001600160801b0316613128565b612ce682612f41565b1015612d045760405162461bcd60e51b81526004016106619061445b565b8b8b83818110612d1057fe5b9050602002016020810190612d2591906134c1565b6001600160a01b0316816001600160a01b03168e6001600160a01b03167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a2232048b8b87818110612d6f57fe5b90506020020135888781518110612d8257fe5b6020026020010151604051612d989291906145bc565b60405180910390a450600101612c6a565b600660209081526000928352604080842090915290825290205481565b82516000906001600160801b0316612ddf575081612e59565b835160208501516001600160801b0391821691612dfe91869116613212565b81612e0557fe5b049050818015612e4957508284602001516001600160801b0316612e3f86600001516001600160801b03168461321290919063ffffffff16565b81612e4657fe5b04105b15612e59576112c381600161300c565b9392505050565b60006001600160801b03821115612e895760405162461bcd60e51b8152600401610661906140f3565b5090565b8181016001600160801b038083169082161015612ebc5760405162461bcd60e51b81526004016106619061412a565b92915050565b600083602001516001600160801b031660001415612ee1575081612e59565b602084015184516001600160801b0391821691612f0091869116613212565b81612f0757fe5b049050818015612e4957508284600001516001600160801b0316612e3f86602001516001600160801b03168461321290919063ffffffff16565b6001600160a01b0381166000818152600a60205260408082205490516370a0823160e01b81529192612ebc92600160801b9092046001600160801b0316916370a0823190612f93903090600401613c55565b60206040518083038186803b158015612fab57600080fd5b505afa158015612fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe39190613aac565b9061300c565b80820382811115612ebc5760405162461bcd60e51b815260040161066190613f3b565b81810181811015612ebc5760405162461bcd60e51b81526004016106619061412a565b60006060856001600160a01b03166323b872dd60e01b86868660405160240161305a93929190613d72565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516130989190613c0f565b6000604051808303816000865af19150503d80600081146130d5576040519150601f19603f3d011682016040523d82523d6000602084013e6130da565b606091505b509150915081801561310457508051158061310457508080602001905181019061310491906136a6565b6131205760405162461bcd60e51b8152600401610661906143ef565b505050505050565b600061314761313683612e60565b84546001600160801b031690612e8d565b83546001600160801b0319166001600160801b03919091169081179093555090919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f83306040516020016131c59493929190613ed2565b6040516020818303038152906040528051906020012090505b919050565b8082036001600160801b038084169082161115612ebc5760405162461bcd60e51b815260040161066190613f3b565b600081158061322d5750508082028282828161322a57fe5b04145b612ebc5760405162461bcd60e51b815260040161066190614500565b60006060846001600160a01b031663a9059cbb60e01b8585604051602401613272929190613dd7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516132b09190613c0f565b6000604051808303816000865af19150503d80600081146132ed576040519150601f19603f3d011682016040523d82523d6000602084013e6132f2565b606091505b509150915081801561331c57508051158061331c57508080602001905181019061331c91906136a6565b6133385760405162461bcd60e51b815260040161066190614017565b5050505050565b60006001600160401b03821115612e895760405162461bcd60e51b8152600401610661906142a7565b600061314761337683612e60565b84546001600160801b0316906131e3565b60606044825110156133cd575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526131de565b60048201915081806020019051810190612ebc9190613ac4565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261342f578182fd5b5081356001600160401b03811115613445578182fd5b602083019150836020808302850101111561345f57600080fd5b9250929050565b60008083601f840112613477578182fd5b5081356001600160401b0381111561348d578182fd5b60208301915083602082850101111561345f57600080fd5b8035612ebc8161468a565b803560ff81168114612ebc57600080fd5b6000602082840312156134d2578081fd5b8135612e598161468a565b600080604083850312156134ef578081fd5b82356134fa8161468a565b9150602083013561350a8161468a565b809150509250929050565b60008060008060008060c0878903121561352d578182fd5b86356135388161468a565b955060208701356135488161468a565b94506040870135613558816146a2565b935061356788606089016134b0565b92506080870135915060a087013590509295509295509295565b60008060408385031215613593578182fd5b823561359e8161468a565b9150602083013561350a816146a2565b6000806000606084860312156135c2578283fd5b83356135cd8161468a565b925060208401356135dd816146a2565b915060408401356135ed816146a2565b809150509250925092565b6000806000806060858703121561360d578384fd5b84356136188161468a565b935060208501356001600160401b03811115613632578384fd5b61363e87828801613466565b9094509250506040850135613652816146a2565b939692955090935050565b600080600060408486031215613671578081fd5b83356001600160401b03811115613686578182fd5b6136928682870161341e565b90945092505060208401356135ed816146a2565b6000602082840312156136b7578081fd5b8151612e59816146a2565b600080600080600080600080600060a08a8c0312156136df578687fd5b89356136ea8161468a565b985060208a01356001600160401b0380821115613705578889fd5b6137118d838e0161341e565b909a50985060408c0135915080821115613729578485fd5b6137358d838e0161341e565b909850965060608c013591508082111561374d578485fd5b6137598d838e0161341e565b909650945060808c0135915080821115613771578384fd5b5061377e8c828d01613466565b915080935050809150509295985092959850929598565b600080604083850312156134ef578182fd5b600080600080608085870312156137bc578182fd5b84356137c78161468a565b935060208501356137d78161468a565b925060408501356137e78161468a565b9396929550929360600135925050565b600080600080600060a0868803121561380e578283fd5b85356138198161468a565b945060208601356138298161468a565b935060408601356138398161468a565b94979396509394606081013594506080013592915050565b600080600080600080600080610100898b03121561386d578182fd5b88356138788161468a565b975060208901356138888161468a565b965060408901356138988161468a565b955060608901359450608089013593506138b58a60a08b016134b0565b925060c0890135915060e089013590509295985092959890939650565b600080600080600080608087890312156138ea578384fd5b86356138f58161468a565b955060208701356139058161468a565b945060408701356001600160401b0380821115613920578586fd5b61392c8a838b0161341e565b90965094506060890135915080821115613944578384fd5b5061395189828a0161341e565b979a9699509497509295939492505050565b600080600060608486031215613977578081fd5b83356139828161468a565b92506020840135613992816146a2565b929592945050506040919091013590565b600080604083850312156139b5578182fd5b82356139c08161468a565b946020939093013593505050565b6000806000606084860312156139e2578081fd5b83356139ed8161468a565b92506020840135915060408401356135ed816146a2565b60008060408385031215613a16578182fd5b8235613a218161468a565b915060208301356001600160401b038116811461350a578182fd5b60008060008060008060a08789031215613a54578384fd5b8635613a5f8161468a565b95506020870135613a6f8161468a565b94506040870135613a7f8161468a565b93506060870135925060808701356001600160401b03811115613aa0578283fd5b61395189828a01613466565b600060208284031215613abd578081fd5b5051919050565b600060208284031215613ad5578081fd5b81516001600160401b0380821115613aeb578283fd5b818401915084601f830112613afe578283fd5b815181811115613b0c578384fd5b604051601f8201601f191681016020018381118282101715613b2c578586fd5b604052818152838201602001871015613b43578485fd5b613b5482602083016020870161465a565b9695505050505050565b6001600160a01b0316815260200190565b6000815180845260208085019450808401835b83811015613b9e57815187529582019590820190600101613b82565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613beb81602086016020860161465a565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b60008251613c2181846020870161465a565b9190910192915050565b60008451613c3d81846020890161465a565b91909101928352506020820152604001919050565b90565b6001600160a01b0391909116815260200190565b600060a082016001600160a01b038b168352602060a08185015281613c8e8b84613e95565b90508b9250835b8b811015613cc057828401613cb383613cae83886134a5565b613b5e565b9094509150600101613c95565b508481036040860152613cd38982613e95565b9250506001600160fb1b03881115613ce9578283fd5b8702613cf681838b61464e565b018281036060840152613d098187613b6f565b90508281036080840152613d1e818587613ba9565b9b9a5050505050505050505050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a06080830152613d6660a083018486613ba9565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015613e2b578151151584529284019290840190600101613e0d565b50505083810382850152808551613e428184613e95565b91508192508381028201848801865b83811015613e7b578583038552613e69838351613bd3565b94870194925090860190600101613e51565b50909998505050505050505050565b901515815260200190565b90815260200190565b95865260208601949094526001600160a01b039283166040860152911660608401521515608083015260a082015260c00190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526112c3602083018486613ba9565b600060208252612e596020830184613bd3565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20536b696d20746f6f206d756368000000000000000000604082015260600190565b6020808252601c908201527f4d6173746572434d67723a2043616e6e6f7420617070726f7665203000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a2075736572206e6f742073656e6465720000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526016908201527f42656e746f426f783a2063616e6e6f7420656d70747900000000000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526013908201527f42656e746f426f783a204e6f20746f6b656e7300000000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20746f5b305d206e6f7420736574000000000000000000604082015260600190565b60208082526014908201527f42656e746f426f783a20746f206e6f7420736574000000000000000000000000604082015260600190565b6020808252601a908201527f53747261746567794d616e616765723a20546f6f206561726c79000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f42656e746f426f783a205472616e73666572206e6f7420617070726f76656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526019908201527f4d6173746572434d67723a207573657220697320636c6f6e6500000000000000604082015260600190565b6020808252601d908201527f4d6173746572434d67723a20496e76616c6964205369676e6174757265000000604082015260600190565b6020808252818101527f426f72696e67466163746f72793a204e6f206d6173746572436f6e7472616374604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206d617374657243206e6f74207365740000000000604082015260600190565b6020808252601b908201527f42656e746f426f783a206e6f206d6173746572436f6e74726163740000000000604082015260600190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601c908201527f4d6173746572434d67723a20557365722063616e6e6f74206265203000000000604082015260600190565b60208082526016908201527f42656e746f426f783a2057726f6e6720616d6f756e7400000000000000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206e6f742077686974656c69737465640000000000604082015260600190565b6020808252601d908201527f42656e746f426f783a20455448207472616e73666572206661696c6564000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f53747261746567794d616e616765723a2054617267657420746f6f2068696768604082015260600190565b6001600160801b0391909116815260200190565b6001600160801b039290921682526001600160a01b0316602082015260400190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b6001600160401b0391909116815260200190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b6000808335601e19843603018112614620578283fd5b8301803591506001600160401b03821115614639578283fd5b60200191503681900382131561345f57600080fd5b82818337506000910152565b60005b8381101561467557818101518382015260200161465d565b83811115614684576000848401525b50505050565b6001600160a01b038116811461469f57600080fd5b50565b801515811461469f57600080fdfea2646970667358221220714e9eea61e3bad2fdd39dac853324e3cdce99430086cd374f6f52f77e00461a64736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106101e75760003560e01c80637c516e9411610102578063d2423b5111610095578063f1676d3711610064578063f1676d3714610580578063f18d03cc146105a0578063f483b3da146105c0578063f7888aec146105e0576101ee565b8063d2423b51146104fb578063da5139ca1461051c578063df23b45b1461053c578063e30c39781461056b576101ee565b806397da6d30116100d157806397da6d3014610486578063aee4d1b2146104a6578063bafe4f14146104bb578063c0a47c93146104db576101ee565b80637c516e94146104115780637ecebe00146104315780638da5cb5b1461045157806391e0eab514610466576101ee565b80633e2a9d4e1161017a5780635662311811610149578063566231181461039157806366c6bb0b146103b157806372cb5d97146103d1578063733a9d7c146103f1576101ee565b80633e2a9d4e1461030e5780634e71e0c81461032e5780634ffe34db146103435780635108a55814610371576101ee565b80631583d56c116101b65780631583d56c1461028c5780631f54245b146102ac578063228bfd9f146102cc5780633644e515146102ec576101ee565b806302b9446c146101f3578063078dfbe71461021d5780630fca88431461023f57806312a90c8a1461025f576101ee565b366101ee57005b600080fd5b6102066102013660046137f7565b610600565b6040516102149291906145bc565b60405180910390f35b34801561022957600080fd5b5061023d6102383660046135ae565b610ac4565b005b34801561024b57600080fd5b5061023d61025a3660046138d2565b610baa565b34801561026b57600080fd5b5061027f61027a3660046134c1565b610e5b565b6040516102149190613e8a565b34801561029857600080fd5b5061023d6102a73660046139a3565b610e70565b6102bf6102ba3660046135f8565b610ea7565b6040516102149190613c55565b3480156102d857600080fd5b506102bf6102e73660046134c1565b611063565b3480156102f857600080fd5b5061030161107e565b6040516102149190613e95565b34801561031a57600080fd5b5061023d610329366004613a04565b6110de565b34801561033a57600080fd5b5061023d6111a9565b34801561034f57600080fd5b5061036361035e3660046134c1565b611236565b6040516102149291906145a2565b34801561037d57600080fd5b506102bf61038c3660046134c1565b61125c565b34801561039d57600080fd5b506103016103ac3660046139ce565b611277565b3480156103bd57600080fd5b5061023d6103cc366004613963565b6112cb565b3480156103dd57600080fd5b5061023d6103ec366004613795565b611894565b3480156103fd57600080fd5b5061023d61040c366004613581565b611cf2565b34801561041d57600080fd5b5061023d61042c366004613851565b611d96565b34801561043d57600080fd5b5061030161044c3660046134c1565b611e0a565b34801561045d57600080fd5b506102bf611e1c565b34801561047257600080fd5b5061027f6104813660046134dd565b611e2b565b34801561049257600080fd5b506102066104a13660046137f7565b611e4b565b3480156104b257600080fd5b5061023d61225f565b3480156104c757600080fd5b506102bf6104d63660046134c1565b6122a6565b3480156104e757600080fd5b5061023d6104f6366004613515565b6122c1565b61050e61050936600461365d565b6125d0565b604051610214929190613df0565b34801561052857600080fd5b506103016105373660046139ce565b612760565b34801561054857600080fd5b5061055c6105573660046134c1565b6127ac565b604051610214939291906145de565b34801561057757600080fd5b506102bf6127e5565b34801561058c57600080fd5b5061023d61059b366004613a3c565b6127f4565b3480156105ac57600080fd5b5061023d6105bb3660046137a7565b612945565b3480156105cc57600080fd5b5061023d6105db3660046136c2565b612ae9565b3480156105ec57600080fd5b506103016105fb366004613795565b612da9565b600080856001600160a01b038116331480159061062657506001600160a01b0381163014155b156106b157336000908152600260205260409020546001600160a01b03168061066a5760405162461bcd60e51b8152600401610661906143b8565b60405180910390fd5b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff166106af5760405162461bcd60e51b81526004016106619061423b565b505b6001600160a01b0386166106d75760405162461bcd60e51b815260040161066190614198565b60006001600160a01b038916156106ee5788610710565b7f00000000000000000000000000000000000000000000000000000000000000005b905061071a6133e7565b506001600160a01b0381166000908152600760209081526040918290208251808401909352546001600160801b03808216808552600160801b90920416918301919091521515806107db57506000826001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a157600080fd5b505afa1580156107b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d99190613aac565b115b6107f75760405162461bcd60e51b8152600401610661906140bc565b8561084f5761080881886000612dc6565b95506103e861082d61081988612e60565b60208401516001600160801b031690612e8d565b6001600160801b0316101561084a57600080945094505050610ab9565b61085e565b61085b81876001612ec2565b96505b6001600160a01b0389163014158061087d57506001600160a01b038a16155b806108a5575080516108a1906001600160801b031661089b84612f41565b90612fe9565b8711155b6108c15760405162461bcd60e51b815260040161066190613f72565b6001600160a01b038083166000908152600660209081526040808320938c16835292905220546108f1908761300c565b6001600160a01b038084166000908152600660209081526040808320938d168352929052205561093761092387612e60565b60208301516001600160801b031690612e8d565b6001600160801b0316602082015261096261095188612e60565b82516001600160801b031690612e8d565b6001600160801b0390811682526001600160a01b03808416600090815260076020908152604090912084518154928601518516600160801b029085166001600160801b031990931692909217909316179091558a16610a34577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0886040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b5050505050610a59565b6001600160a01b0389163014610a5957610a596001600160a01b0383168a308a61302f565b876001600160a01b0316896001600160a01b0316836001600160a01b03167fb2346165e782564f17f5b7e555c21f4fd96fbc93458572bf0113ea35a958fc558a8a604051610aa89291906145bc565b60405180910390a486945085935050505b509550959350505050565b6000546001600160a01b03163314610aee5760405162461bcd60e51b815260040161066190614206565b8115610b89576001600160a01b038316151580610b085750805b610b245760405162461bcd60e51b815260040161066190614085565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610ba5565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b846001600160a01b0381163314801590610bcd57506001600160a01b0381163014155b15610c4f57336000908152600260205260409020546001600160a01b031680610c085760405162461bcd60e51b8152600401610661906143b8565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff16610c4d5760405162461bcd60e51b81526004016106619061423b565b505b600085858281610c5b57fe5b9050602002016020810190610c7091906134c1565b6001600160a01b03161415610c975760405162461bcd60e51b815260040161066190614161565b600084815b81811015610df3576000888883818110610cb257fe5b9050602002016020810190610cc791906134c1565b9050610d36878784818110610cd857fe5b90506020020135600660008e6001600160a01b03166001600160a01b031681526020019081526020016000206000846001600160a01b03166001600160a01b031681526020019081526020016000205461300c90919063ffffffff16565b6001600160a01b03808d16600090815260066020908152604080832093861683529290522055610d81878784818110610d6b57fe5b905060200201358561300c90919063ffffffff16565b9350806001600160a01b03168a6001600160a01b03168c6001600160a01b03167f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a8a8a87818110610dce57fe5b90506020020135604051610de29190613e95565b60405180910390a450600101610c9c565b506001600160a01b03808a166000908152600660209081526040808320938c1683529290522054610e249083612fe9565b6001600160a01b03998a1660009081526006602090815260408083209b909c16825299909952989097209790975550505050505050565b60046020526000908152604090205460ff1681565b610e856001600160a01b03831633308461302f565b6001600160a01b0382166000908152600760205260409020610ba59082613128565b60006001600160a01b038516610ecf5760405162461bcd60e51b81526004016106619061434c565b606085901b8215610f415760008585604051610eec929190613bff565b60405180910390209050604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528260148201526e5af43d82803e903d91602b57fd5bf360881b6028820152816037826000f593505050610f86565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528160148201526e5af43d82803e903d91602b57fd5bf360881b60288201526037816000f09250505b6001600160a01b038281166000818152600260205260409081902080546001600160a01b031916938a16939093179092559051631377d1f560e21b8152634ddf47d4903490610fdb9089908990600401613f14565b6000604051808303818588803b158015610ff457600080fd5b505af1158015611008573d6000803e3d6000fd5b5050505050816001600160a01b0316866001600160a01b03167fd62166f3c2149208e51788b1401cc356bf5da1fc6c7886a32e18570f57d88b3b8787604051611052929190613f14565b60405180910390a350949350505050565b6008602052600090815260409020546001600160a01b031681565b6000467f000000000000000000000000000000000000000000000000000000000000000081146110b6576110b18161316c565b6110d8565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6000546001600160a01b031633146111085760405162461bcd60e51b815260040161066190614206565b605f816001600160401b031611156111325760405162461bcd60e51b815260040161066190614537565b6001600160a01b0382166000818152600a602052604090819020805467ffffffffffffffff60401b1916600160401b6001600160401b03861602179055517f7543af99b5602c06e62da0631b5308489a5ff859150105a623b6eb15e8deae0b9061119d9084906145ca565b60405180910390a25050565b6001546001600160a01b03163381146111d45760405162461bcd60e51b815260040161066190614272565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6007602052600090815260409020546001600160801b0380821691600160801b90041682565b6009602052600090815260409020546001600160a01b031681565b6001600160a01b03831660009081526007602090815260408083208151808301909252546001600160801b038082168352600160801b90910416918101919091526112c3908484612ec2565b949350505050565b6112d36133fe565b506001600160a01b038381166000818152600a60209081526040808320815160608101835290546001600160401b038082168352600160401b82041682850152600160801b90046001600160801b031681830190815294845260089092528083205493519051630c7e663b60e11b81529194939093169283916318fccc7691611360913390600401614580565b602060405180830381600087803b15801561137a57600080fd5b505af115801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190613aac565b9050801580156113c0575084155b156113cd57505050610ba5565b6001600160a01b0386166000908152600760205260408120546001600160801b0316908213156114835781611402828261300c565b915061140d82612e60565b6001600160a01b0389166000818152600760205260409081902080546001600160801b0319166001600160801b03949094169390931790925590517f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d290611475908490613e95565b60405180910390a250611551565b600082121561155157600082900361149b8282612fe9565b91506114a682612e60565b6001600160a01b038916600090815260076020526040902080546001600160801b0319166001600160801b03929092169190911790556114fc6114e882612e60565b60408701516001600160801b0316906131e3565b6001600160801b0316604080870191909152516001600160a01b038916907f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9790611547908490613e95565b60405180910390a2505b8515611810576000606461157b86602001516001600160401b03168461321290919063ffffffff16565b8161158257fe5b0490508085604001516001600160801b031610156116bd5760006115bc86604001516001600160801b031683612fe990919063ffffffff16565b905086158015906115cc57508681115b156115d45750855b6115e86001600160a01b038a168683613249565b6116086115f482612e60565b60408801516001600160801b031690612e8d565b6001600160801b031660408088019190915251636939aaf560e01b81526001600160a01b03861690636939aaf590611644908490600401613e95565b600060405180830381600087803b15801561165e57600080fd5b505af1158015611672573d6000803e3d6000fd5b50505050886001600160a01b03167fb18e7e4f6eac147a63a3bb6beb2d9039c88698623aff3efc4febbc20b0164ee5826040516116af9190613e95565b60405180910390a25061180e565b8085604001516001600160801b0316111561180e5760006116f46116e083612e60565b60408801516001600160801b0316906131e3565b6001600160801b03169050861580159061170d57508681115b156117155750855b604051632e1a7d4d60e01b81526000906001600160a01b03871690632e1a7d4d90611744908590600401613e95565b602060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117969190613aac565b90506117b86117a482612e60565b60408901516001600160801b0316906131e3565b6001600160801b0316604080890191909152516001600160a01b038b16907f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a90611803908490613e95565b60405180910390a250505b505b5050506001600160a01b0384166000908152600a6020908152604091829020835181549285015193909401516001600160801b03908116600160801b026001600160401b03948516600160401b0267ffffffffffffffff60401b199590961667ffffffffffffffff1990941693909317939093169390931791909116179055505050565b6000546001600160a01b031633146118be5760405162461bcd60e51b815260040161066190614206565b6118c66133fe565b506001600160a01b038281166000818152600a60209081526040808320815160608101835290546001600160401b038082168352600160401b8204811683860152600160801b9091046001600160801b03168284015294845260099092529091205481519193169116158061194d5750826001600160a01b0316816001600160a01b031614155b156119d7576001600160a01b03848116600090815260096020526040902080546001600160a01b03191691851691909117905561198e62127500420161333f565b6001600160401b031682526040516001600160a01b0380851691908616907f6f7ccdf3f86039e5a1dcf6028bf7b4773cbf7a234716ba2e5392b12bb0f8558f90600090a3611c72565b81516001600160401b0316158015906119fa575081516001600160401b03164210155b611a165760405162461bcd60e51b8152600401610661906141cf565b6001600160a01b038481166000908152600860205260409020541615611bfb576001600160a01b0380851660009081526008602052604080822054858201519151637f8661a160e01b815292931691637f8661a191611a779160040161456c565b602060405180830381600087803b158015611a9157600080fd5b505af1158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190613aac565b90506000811315611b40576001600160a01b03851660009081526007602052604090208190611af89082613128565b50856001600160a01b03167f911c9f20a03edabcbcbd18dca1174cce47a91b234ced7a5a3c60ba0d5b56c5d282604051611b329190613e95565b60405180910390a250611bb4565b6000811215611bb4576001600160a01b03851660009081526007602052604081209082900390611b709082613368565b50856001600160a01b03167f8f1f26eb9b6aa8689dbdd519ead1999d9c8819d4738e403b2003b18197d9cf9782604051611baa9190613e95565b60405180910390a2505b846001600160a01b03167f39aa22060f8dd4d291720311feedf3b72fef47c06c66ccf5c22b502c62e7550a8460400151604051611bf1919061456c565b60405180910390a2505b6001600160a01b03808516600081815260086020908152604080832080548688166001600160a01b0319918216179091558388528782018490528484526009909252808320805490921690915551928616927f03e6352a885adc4cc54767592939c3b1bbd65685658c3beaaba66a888120e2179190a35b506001600160a01b03929092166000908152600a60209081526040918290208451815492860151939095015167ffffffffffffffff199092166001600160401b039586161767ffffffffffffffff60401b1916600160401b9590931694909402919091176001600160801b03908116600160801b91909216021790915550565b6000546001600160a01b03163314611d1c5760405162461bcd60e51b815260040161066190614206565b6001600160a01b038216611d425760405162461bcd60e51b815260040161066190613fa9565b6001600160a01b03821660008181526004602052604090819020805460ff1916841515179055517f31a1e0eac44b54ac6c2a2efa87e92c83405ffcf33fceef02a7bca695130e26009061119d908490613e8a565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611dce908a908a908a908a908a908a908a90600401613d96565b600060405180830381600087803b158015611de857600080fd5b505af1158015611dfc573d6000803e3d6000fd5b505050505050505050505050565b60056020526000908152604090205481565b6000546001600160a01b031681565b600360209081526000928352604080842090915290825290205460ff1681565b600080856001600160a01b0381163314801590611e7157506001600160a01b0381163014155b15611ef357336000908152600260205260409020546001600160a01b031680611eac5760405162461bcd60e51b8152600401610661906143b8565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff16611ef15760405162461bcd60e51b81526004016106619061423b565b505b6001600160a01b038616611f195760405162461bcd60e51b815260040161066190614198565b60006001600160a01b03891615611f305788611f52565b7f00000000000000000000000000000000000000000000000000000000000000005b9050611f5c6133e7565b506001600160a01b0381166000908152600760209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015285611fb457611fad81886001612dc6565b9550611fc3565b611fc081876000612ec2565b96505b6001600160a01b038083166000908152600660209081526040808320938d1683529290522054611ff39087612fe9565b6001600160a01b038084166000908152600660209081526040808320938e168352929052205561203661202588612e60565b82516001600160801b0316906131e3565b6001600160801b0316815261206161204d87612e60565b60208301516001600160801b0316906131e3565b6001600160801b0316602082018190526103e811158061208c575060208101516001600160801b0316155b6120a85760405162461bcd60e51b81526004016106619061404e565b6001600160a01b03828116600090815260076020908152604090912083518154928501516001600160801b03199093166001600160801b03918216178116600160801b91909316029190911790558a166121fc57604051632e1a7d4d60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d90612148908a90600401613e95565b600060405180830381600087803b15801561216257600080fd5b505af1158015612176573d6000803e3d6000fd5b505050506000886001600160a01b03168860405161219390613c52565b60006040518083038185875af1925050503d80600081146121d0576040519150601f19603f3d011682016040523d82523d6000602084013e6121d5565b606091505b50509050806121f65760405162461bcd60e51b8152600401610661906144c9565b50612210565b6122106001600160a01b0383168989613249565b876001600160a01b0316896001600160a01b0316836001600160a01b03167fad9ab9ee6953d4d177f4a03b3a3ac3178ffcb9816319f348060194aa76b144868a8a604051610aa89291906145bc565b3360008181526002602052604080822080546001600160a01b03191684179055517fdfb44ffabf0d3a8f650d3ce43eff98f6d050e7ea1a396d5794f014e7dadabacb9190a2565b6002602052600090815260409020546001600160a01b031681565b6001600160a01b0385166122e75760405162461bcd60e51b815260040161066190614381565b811580156122f3575080155b8015612300575060ff8316155b156123a2576001600160a01b038616331461232d5760405162461bcd60e51b815260040161066190613fe0565b6001600160a01b0386811660009081526002602052604090205416156123655760405162461bcd60e51b8152600401610661906142de565b6001600160a01b03851660009081526004602052604090205460ff1661239d5760405162461bcd60e51b815260040161066190614492565b61255c565b6001600160a01b0386166123c85760405162461bcd60e51b815260040161066190614424565b600060405180604001604052806002815260200161190160f01b8152506123ed61107e565b7f1962bc9f5484cb7a998701b81090e966ee1fce5771af884cceee7c081b14ade287612439577fb426802f1f7dc850a7b6b38805edea2442f3992878a9ab985abfe8091d95d0b161245b565b7f422ac5323fe049241dee67716229a1cc1bc7b313b23dfe3ef6d42ab177a3b2845b6001600160a01b038b1660009081526005602090815260409182902080546001810190915591516124959493928e928e928e929101613e9e565b604051602081830303815290604052805190602001206040516020016124bd93929190613c2b565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516124fa9493929190613ef6565b6020604051602081039080840390855afa15801561251c573d6000803e3d6000fd5b505050602060405103519050876001600160a01b0316816001600160a01b0316146125595760405162461bcd60e51b815260040161066190614315565b50505b6001600160a01b038581166000818152600360209081526040808320948b168084529490915290819020805460ff1916881515179055517f5f6ebb64ba012a851c6f014e6cad458ddf213d1512049b31cd06365c2b059257906125c0908890613e8a565b60405180910390a3505050505050565b606080836001600160401b03811180156125e957600080fd5b50604051908082528060200260200182016040528015612613578160200160208202803683370190505b509150836001600160401b038111801561262c57600080fd5b5060405190808252806020026020018201604052801561266057816020015b606081526020019060019003908161264b5790505b50905060005b8481101561275757600060603088888581811061267f57fe5b9050602002810190612691919061460a565b60405161269f929190613bff565b600060405180830381855af49150503d80600081146126da576040519150601f19603f3d011682016040523d82523d6000602084013e6126df565b606091505b509150915081806126ee575085155b6126f782613387565b906127155760405162461bcd60e51b81526004016106619190613f28565b508185848151811061272357fe5b6020026020010190151590811515815250508084848151811061274257fe5b60209081029190910101525050600101612666565b50935093915050565b6001600160a01b03831660009081526007602090815260408083208151808301909252546001600160801b038082168352600160801b90910416918101919091526112c3908484612dc6565b600a602052600090815260409020546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b6001546001600160a01b031681565b6000620186a0612805856032613212565b8161280c57fe5b0490506128236001600160a01b0386168786613249565b6040516323e30c8b60e01b81526001600160a01b038816906323e30c8b906128599033908990899087908a908a90600401613d2d565b600060405180830381600087803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505050506128be61289782612e60565b6001600160a01b0387166000908152600760205260409020906001600160801b0316613128565b6128c786612f41565b10156128e55760405162461bcd60e51b81526004016106619061445b565b856001600160a01b0316856001600160a01b0316886001600160a01b03167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a22320487856040516129349291906145bc565b60405180910390a450505050505050565b826001600160a01b038116331480159061296857506001600160a01b0381163014155b156129ea57336000908152600260205260409020546001600160a01b0316806129a35760405162461bcd60e51b8152600401610661906143b8565b6001600160a01b0380821660009081526003602090815260408083209386168352929052205460ff166129e85760405162461bcd60e51b81526004016106619061423b565b505b6001600160a01b038316612a105760405162461bcd60e51b815260040161066190614198565b6001600160a01b03808616600090815260066020908152604080832093881683529290522054612a409083612fe9565b6001600160a01b03868116600090815260066020908152604080832089851684529091528082209390935590851681522054612a7c908361300c565b6001600160a01b0380871660008181526006602090815260408083208986168085529252918290209490945551918716917f6eabe333476233fd382224f233210cb808a7bc4c4de64f9d76628bf63c677b1a90612ada908790613e95565b60405180910390a45050505050565b6060856001600160401b0381118015612b0157600080fd5b50604051908082528060200260200182016040528015612b2b578160200160208202803683370190505b5090508560005b81811015612bfa576000878783818110612b4857fe5b905060200201359050620186a0612b6960328361321290919063ffffffff16565b81612b7057fe5b04848381518110612b7d57fe5b602002602001018181525050612bf18c8c84818110612b9857fe5b9050602002016020810190612bad91906134c1565b898985818110612bb957fe5b905060200201358c8c86818110612bcc57fe5b9050602002016020810190612be191906134c1565b6001600160a01b03169190613249565b50600101612b32565b5060405163d9d1762360e01b81526001600160a01b038c169063d9d1762390612c359033908c908c908c908c908a908d908d90600401613c69565b600060405180830381600087803b158015612c4f57600080fd5b505af1158015612c63573d6000803e3d6000fd5b5050505060005b81811015611dfc576000898983818110612c8057fe5b9050602002016020810190612c9591906134c1565b9050612cdd612cb6858481518110612ca957fe5b6020026020010151612e60565b6001600160a01b0383166000908152600760205260409020906001600160801b0316613128565b612ce682612f41565b1015612d045760405162461bcd60e51b81526004016106619061445b565b8b8b83818110612d1057fe5b9050602002016020810190612d2591906134c1565b6001600160a01b0316816001600160a01b03168e6001600160a01b03167f3be9b85936d5d30a1655ea116a17ee3d827b2cd428cc026ce5bf2ac46a2232048b8b87818110612d6f57fe5b90506020020135888781518110612d8257fe5b6020026020010151604051612d989291906145bc565b60405180910390a450600101612c6a565b600660209081526000928352604080842090915290825290205481565b82516000906001600160801b0316612ddf575081612e59565b835160208501516001600160801b0391821691612dfe91869116613212565b81612e0557fe5b049050818015612e4957508284602001516001600160801b0316612e3f86600001516001600160801b03168461321290919063ffffffff16565b81612e4657fe5b04105b15612e59576112c381600161300c565b9392505050565b60006001600160801b03821115612e895760405162461bcd60e51b8152600401610661906140f3565b5090565b8181016001600160801b038083169082161015612ebc5760405162461bcd60e51b81526004016106619061412a565b92915050565b600083602001516001600160801b031660001415612ee1575081612e59565b602084015184516001600160801b0391821691612f0091869116613212565b81612f0757fe5b049050818015612e4957508284600001516001600160801b0316612e3f86602001516001600160801b03168461321290919063ffffffff16565b6001600160a01b0381166000818152600a60205260408082205490516370a0823160e01b81529192612ebc92600160801b9092046001600160801b0316916370a0823190612f93903090600401613c55565b60206040518083038186803b158015612fab57600080fd5b505afa158015612fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe39190613aac565b9061300c565b80820382811115612ebc5760405162461bcd60e51b815260040161066190613f3b565b81810181811015612ebc5760405162461bcd60e51b81526004016106619061412a565b60006060856001600160a01b03166323b872dd60e01b86868660405160240161305a93929190613d72565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516130989190613c0f565b6000604051808303816000865af19150503d80600081146130d5576040519150601f19603f3d011682016040523d82523d6000602084013e6130da565b606091505b509150915081801561310457508051158061310457508080602001905181019061310491906136a6565b6131205760405162461bcd60e51b8152600401610661906143ef565b505050505050565b600061314761313683612e60565b84546001600160801b031690612e8d565b83546001600160801b0319166001600160801b03919091169081179093555090919050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667fd7df266aff736d415a9dc14b4158201d612e70d75b9c7f4e375ccfd20aa5166f83306040516020016131c59493929190613ed2565b6040516020818303038152906040528051906020012090505b919050565b8082036001600160801b038084169082161115612ebc5760405162461bcd60e51b815260040161066190613f3b565b600081158061322d5750508082028282828161322a57fe5b04145b612ebc5760405162461bcd60e51b815260040161066190614500565b60006060846001600160a01b031663a9059cbb60e01b8585604051602401613272929190613dd7565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516132b09190613c0f565b6000604051808303816000865af19150503d80600081146132ed576040519150601f19603f3d011682016040523d82523d6000602084013e6132f2565b606091505b509150915081801561331c57508051158061331c57508080602001905181019061331c91906136a6565b6133385760405162461bcd60e51b815260040161066190614017565b5050505050565b60006001600160401b03821115612e895760405162461bcd60e51b8152600401610661906142a7565b600061314761337683612e60565b84546001600160801b0316906131e3565b60606044825110156133cd575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526131de565b60048201915081806020019051810190612ebc9190613ac4565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b60008083601f84011261342f578182fd5b5081356001600160401b03811115613445578182fd5b602083019150836020808302850101111561345f57600080fd5b9250929050565b60008083601f840112613477578182fd5b5081356001600160401b0381111561348d578182fd5b60208301915083602082850101111561345f57600080fd5b8035612ebc8161468a565b803560ff81168114612ebc57600080fd5b6000602082840312156134d2578081fd5b8135612e598161468a565b600080604083850312156134ef578081fd5b82356134fa8161468a565b9150602083013561350a8161468a565b809150509250929050565b60008060008060008060c0878903121561352d578182fd5b86356135388161468a565b955060208701356135488161468a565b94506040870135613558816146a2565b935061356788606089016134b0565b92506080870135915060a087013590509295509295509295565b60008060408385031215613593578182fd5b823561359e8161468a565b9150602083013561350a816146a2565b6000806000606084860312156135c2578283fd5b83356135cd8161468a565b925060208401356135dd816146a2565b915060408401356135ed816146a2565b809150509250925092565b6000806000806060858703121561360d578384fd5b84356136188161468a565b935060208501356001600160401b03811115613632578384fd5b61363e87828801613466565b9094509250506040850135613652816146a2565b939692955090935050565b600080600060408486031215613671578081fd5b83356001600160401b03811115613686578182fd5b6136928682870161341e565b90945092505060208401356135ed816146a2565b6000602082840312156136b7578081fd5b8151612e59816146a2565b600080600080600080600080600060a08a8c0312156136df578687fd5b89356136ea8161468a565b985060208a01356001600160401b0380821115613705578889fd5b6137118d838e0161341e565b909a50985060408c0135915080821115613729578485fd5b6137358d838e0161341e565b909850965060608c013591508082111561374d578485fd5b6137598d838e0161341e565b909650945060808c0135915080821115613771578384fd5b5061377e8c828d01613466565b915080935050809150509295985092959850929598565b600080604083850312156134ef578182fd5b600080600080608085870312156137bc578182fd5b84356137c78161468a565b935060208501356137d78161468a565b925060408501356137e78161468a565b9396929550929360600135925050565b600080600080600060a0868803121561380e578283fd5b85356138198161468a565b945060208601356138298161468a565b935060408601356138398161468a565b94979396509394606081013594506080013592915050565b600080600080600080600080610100898b03121561386d578182fd5b88356138788161468a565b975060208901356138888161468a565b965060408901356138988161468a565b955060608901359450608089013593506138b58a60a08b016134b0565b925060c0890135915060e089013590509295985092959890939650565b600080600080600080608087890312156138ea578384fd5b86356138f58161468a565b955060208701356139058161468a565b945060408701356001600160401b0380821115613920578586fd5b61392c8a838b0161341e565b90965094506060890135915080821115613944578384fd5b5061395189828a0161341e565b979a9699509497509295939492505050565b600080600060608486031215613977578081fd5b83356139828161468a565b92506020840135613992816146a2565b929592945050506040919091013590565b600080604083850312156139b5578182fd5b82356139c08161468a565b946020939093013593505050565b6000806000606084860312156139e2578081fd5b83356139ed8161468a565b92506020840135915060408401356135ed816146a2565b60008060408385031215613a16578182fd5b8235613a218161468a565b915060208301356001600160401b038116811461350a578182fd5b60008060008060008060a08789031215613a54578384fd5b8635613a5f8161468a565b95506020870135613a6f8161468a565b94506040870135613a7f8161468a565b93506060870135925060808701356001600160401b03811115613aa0578283fd5b61395189828a01613466565b600060208284031215613abd578081fd5b5051919050565b600060208284031215613ad5578081fd5b81516001600160401b0380821115613aeb578283fd5b818401915084601f830112613afe578283fd5b815181811115613b0c578384fd5b604051601f8201601f191681016020018381118282101715613b2c578586fd5b604052818152838201602001871015613b43578485fd5b613b5482602083016020870161465a565b9695505050505050565b6001600160a01b0316815260200190565b6000815180845260208085019450808401835b83811015613b9e57815187529582019590820190600101613b82565b509495945050505050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008151808452613beb81602086016020860161465a565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b60008251613c2181846020870161465a565b9190910192915050565b60008451613c3d81846020890161465a565b91909101928352506020820152604001919050565b90565b6001600160a01b0391909116815260200190565b600060a082016001600160a01b038b168352602060a08185015281613c8e8b84613e95565b90508b9250835b8b811015613cc057828401613cb383613cae83886134a5565b613b5e565b9094509150600101613c95565b508481036040860152613cd38982613e95565b9250506001600160fb1b03881115613ce9578283fd5b8702613cf681838b61464e565b018281036060840152613d098187613b6f565b90508281036080840152613d1e818587613ba9565b9b9a5050505050505050505050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a06080830152613d6660a083018486613ba9565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015613e2b578151151584529284019290840190600101613e0d565b50505083810382850152808551613e428184613e95565b91508192508381028201848801865b83811015613e7b578583038552613e69838351613bd3565b94870194925090860190600101613e51565b50909998505050505050505050565b901515815260200190565b90815260200190565b95865260208601949094526001600160a01b039283166040860152911660608401521515608083015260a082015260c00190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526112c3602083018486613ba9565b600060208252612e596020830184613bd3565b60208082526015908201527f426f72696e674d6174683a20556e646572666c6f770000000000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20536b696d20746f6f206d756368000000000000000000604082015260600190565b6020808252601c908201527f4d6173746572434d67723a2043616e6e6f7420617070726f7665203000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a2075736572206e6f742073656e6465720000000000604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526016908201527f42656e746f426f783a2063616e6e6f7420656d70747900000000000000000000604082015260600190565b60208082526015908201527f4f776e61626c653a207a65726f20616464726573730000000000000000000000604082015260600190565b60208082526013908201527f42656e746f426f783a204e6f20746f6b656e7300000000000000000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526017908201527f42656e746f426f783a20746f5b305d206e6f7420736574000000000000000000604082015260600190565b60208082526014908201527f42656e746f426f783a20746f206e6f7420736574000000000000000000000000604082015260600190565b6020808252601a908201527f53747261746567794d616e616765723a20546f6f206561726c79000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f42656e746f426f783a205472616e73666572206e6f7420617070726f76656400604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526019908201527f4d6173746572434d67723a207573657220697320636c6f6e6500000000000000604082015260600190565b6020808252601d908201527f4d6173746572434d67723a20496e76616c6964205369676e6174757265000000604082015260600190565b6020808252818101527f426f72696e67466163746f72793a204e6f206d6173746572436f6e7472616374604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206d617374657243206e6f74207365740000000000604082015260600190565b6020808252601b908201527f42656e746f426f783a206e6f206d6173746572436f6e74726163740000000000604082015260600190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601c908201527f4d6173746572434d67723a20557365722063616e6e6f74206265203000000000604082015260600190565b60208082526016908201527f42656e746f426f783a2057726f6e6720616d6f756e7400000000000000000000604082015260600190565b6020808252601b908201527f4d6173746572434d67723a206e6f742077686974656c69737465640000000000604082015260600190565b6020808252601d908201527f42656e746f426f783a20455448207472616e73666572206661696c6564000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f53747261746567794d616e616765723a2054617267657420746f6f2068696768604082015260600190565b6001600160801b0391909116815260200190565b6001600160801b039290921682526001600160a01b0316602082015260400190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b6001600160401b0391909116815260200190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b6000808335601e19843603018112614620578283fd5b8301803591506001600160401b03821115614639578283fd5b60200191503681900382131561345f57600080fd5b82818337506000910152565b60005b8381101561467557818101518382015260200161465d565b83811115614684576000848401525b50505050565b6001600160a01b038116811461469f57600080fd5b50565b801515811461469f57600080fdfea2646970667358221220714e9eea61e3bad2fdd39dac853324e3cdce99430086cd374f6f52f77e00461a64736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
