UNPKG

@luckyfinance/core

Version:

Core contracts for the LuckySwap protocol

1,179 lines 123 kB
{
  "_format": "hh-sol-artifact-1",
  "contractName": "GoldVeinPairMediumRiskV1",
  "sourceName": "contracts/alpine/GoldVeinPairMediumRiskV1.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IAlpineV1",
          "name": "alPine_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "accruedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeFraction",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "rate",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "utilization",
          "type": "uint256"
        }
      ],
      "name": "LogAccrue",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "name": "LogAddAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "LogAddCollateral",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        }
      ],
      "name": "LogBorrow",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "name": "LogExchangeRate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newFeeTo",
          "type": "address"
        }
      ],
      "name": "LogFeeTo",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "name": "LogRemoveAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "LogRemoveCollateral",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        }
      ],
      "name": "LogRepay",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "feeTo",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "feesEarnedFraction",
          "type": "uint256"
        }
      ],
      "name": "LogWithdrawFees",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accrue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accrueInfo",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "interestPerSecond",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "lastAccrued",
          "type": "uint64"
        },
        {
          "internalType": "uint128",
          "name": "feesEarnedFraction",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "skim",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "addAsset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "skim",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "addCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "alPine",
      "outputs": [
        {
          "internalType": "contract IAlpineV1",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "asset",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "borrow",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "collateral",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8[]",
          "name": "actions",
          "type": "uint8[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "datas",
          "type": "bytes[]"
        }
      ],
      "name": "cook",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "value1",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value2",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "exchangeRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeTo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "init",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "users",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "maxBorrowParts",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "contract ISwapper",
          "name": "swapper",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "open",
          "type": "bool"
        }
      ],
      "name": "liquidate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "masterContract",
      "outputs": [
        {
          "internalType": "contract GoldVeinPairMediumRiskV1",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract IOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracleData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "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": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "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": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "fraction",
          "type": "uint256"
        }
      ],
      "name": "removeAsset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "share",
          "type": "uint256"
        }
      ],
      "name": "removeCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "skim",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "part",
          "type": "uint256"
        }
      ],
      "name": "repay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newFeeTo",
          "type": "address"
        }
      ],
      "name": "setFeeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISwapper",
          "name": "swapper",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "enable",
          "type": "bool"
        }
      ],
      "name": "setSwapper",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISwapper",
          "name": "",
          "type": "address"
        }
      ],
      "name": "swappers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalAsset",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "elastic",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "base",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalBorrow",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "elastic",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "base",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalCollateralShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": [],
      "name": "updateExchangeRate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "updated",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "rate",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userBorrowPart",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "userCollateralShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040523480156200001257600080fd5b50604051620060ea380380620060ea833981016040819052620000359162000110565b4660a08190526200004681620000ba565b60805250600380546001600160a01b031916339081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160601b0319606091821b1660c05230901b60e052600580546001600160a01b031916331790556200015f565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692188230604051602001620000f39392919062000140565b604051602081830303815290604052805190602001209050919050565b60006020828403121562000122578081fd5b81516001600160a01b038116811462000139578182fd5b9392505050565b92835260208301919091526001600160a01b0316604082015260600190565b60805160a05160c05160601c60e05160601c615eb46200023660003980610d8c5280611efb52806121eb52806128ea52508061141652806115de52806116b652806118295280611ad95280611e525280611fb652806120e652806121a5528061237f52806124c8528061262c52806127bc5280612d7352806132c352806133cb528061348d5280613645528061370552806138d65280613ba45280613cf35280613e1c5280613fa9528061405f528061413b52806142c052806145bb5280614642525080610cb5525080610cea5250615eb46000f3fe6080604052600436106102725760003560e01c8063656f3d641161014f57806395d89b41116100c1578063d8dfeb451161007a578063d8dfeb45146106f1578063dd62ed3e14610706578063e30c397814610726578063f46901ed1461073b578063f8ba4cff1461075b578063f9557ccb1461077057610272565b806395d89b411461064e578063a2c9a96914610663578063a9059cbb14610678578063b27c0e7414610698578063cd446e22146106bc578063d505accf146106d157610272565b80637ecebe00116101135780637ecebe00146105965780638285ef40146105b6578063860ffea1146105d9578063876467f8146105f95780638cad7fbe146106195780638da5cb5b1461063957610272565b8063656f3d641461051957806370a082311461052c57806374645ff31461054c57806376ee101b146105615780637dc0d1d01461058157610272565b8063313ce567116101e8578063473e3ce7116101ac578063473e3ce714610479578063476343ee1461048e57806348e4163e146104a35780634b8a3529146104c35780634ddf47d4146104f15780634e71e0c81461050457610272565b8063313ce567146103f85780633644e5151461041a57806338d52e0f1461042f5780633ba0b9a9146104445780633f2617cb1461045957610272565b806315294c401161023a57806315294c401461033657806318160ddd146103635780631b51e940146103785780631c9e379b146103985780632317ef67146103b857806323b872dd146103d857610272565b8063017e7e581461027757806302ce728f146102a257806306fdde03146102c5578063078dfbe7146102e7578063095ea7b314610309575b600080fd5b34801561028357600080fd5b5061028c610785565b6040516102999190615512565b60405180910390f35b3480156102ae57600080fd5b506102b7610794565b60405161029992919061556a565b3480156102d157600080fd5b506102da610871565b60405161029991906155f4565b3480156102f357600080fd5b50610307610302366004614d93565b610949565b005b34801561031557600080fd5b50610329610324366004614e0c565b610a39565b604051610299919061555f565b34801561034257600080fd5b50610356610351366004614ddd565b610aa4565b604051610299919061557a565b34801561036f57600080fd5b50610356610ac1565b34801561038457600080fd5b50610356610393366004614ddd565b610ad7565b3480156103a457600080fd5b506103566103b3366004614b7c565b610aec565b3480156103c457600080fd5b506103566103d3366004614e0c565b610afe565b3480156103e457600080fd5b506103296103f3366004614ce3565b610b19565b34801561040457600080fd5b5061040d610c93565b6040516102999190615d42565b34801561042657600080fd5b50610356610cb0565b34801561043b57600080fd5b5061028c610d10565b34801561045057600080fd5b50610356610d1f565b34801561046557600080fd5b5061030761047436600461521d565b610d25565b34801561048557600080fd5b50610356610d7a565b34801561049a57600080fd5b50610307610d80565b3480156104af57600080fd5b506103566104be366004614b7c565b610ebd565b3480156104cf57600080fd5b506104e36104de366004614e0c565b610ecf565b604051610299929190615cf2565b6103076104ff366004614fee565b610f1d565b34801561051057600080fd5b50610307611000565b6104e3610527366004614edc565b61108e565b34801561053857600080fd5b50610356610547366004614b7c565b6119cc565b34801561055857600080fd5b506102da6119de565b34801561056d57600080fd5b5061030761057c366004614e37565b611a6c565b34801561058d57600080fd5b5061028c612576565b3480156105a257600080fd5b506103566105b1366004614b7c565b612585565b3480156105c257600080fd5b506105cb612597565b604051610299929190615cd8565b3480156105e557600080fd5b506103076105f4366004614ddd565b6125b1565b34801561060557600080fd5b50610307610614366004614e0c565b612692565b34801561062557600080fd5b50610329610634366004614b7c565b6126d2565b34801561064557600080fd5b5061028c6126e7565b34801561065a57600080fd5b506102da6126f6565b34801561066f57600080fd5b5061028c6127ba565b34801561068457600080fd5b50610329610693366004614e0c565b6127de565b3480156106a457600080fd5b506106ad6128bb565b60405161029993929190615d16565b3480156106c857600080fd5b5061028c6128e8565b3480156106dd57600080fd5b506103076106ec366004614d23565b61290c565b3480156106fd57600080fd5b5061028c612aad565b34801561071257600080fd5b50610356610721366004614cab565b612abc565b34801561073257600080fd5b5061028c612ad9565b34801561074757600080fd5b50610307610756366004614b7c565b612ae8565b34801561076757600080fd5b50610307612b5c565b34801561077c57600080fd5b506105cb61311e565b6005546001600160a01b031681565b60095460405163d6d7d52560e01b815260009182916001600160a01b039091169063d6d7d525906107ca90600a90600401615607565b6040805180830381600087803b1580156107e357600080fd5b505af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190614f8d565b909250905081156108685760108190556040517f9f9192b5edb17356c524e08d9e025c8e2f6307e6ea52fb7968faa3081f51c3c89061085b90839061557a565b60405180910390a161086d565b506010545b9091565b600754606090610889906001600160a01b0316613138565b60085461089e906001600160a01b0316613138565b60095460405163355a219b60e21b81526001600160a01b039091169063d568866c906108cf90600a90600401615607565b60006040518083038186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261092391908101906152ac565b60405160200161093593929190615424565b604051602081830303815290604052905090565b6003546001600160a01b0316331461097c5760405162461bcd60e51b815260040161097390615b62565b60405180910390fd5b8115610a18576001600160a01b0383161515806109965750805b6109b25760405162461bcd60e51b815260040161097390615991565b6003546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0385166001600160a01b031991821617909155600480549091169055610a34565b600480546001600160a01b0319166001600160a01b0385161790555b505050565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a9290869061557a565b60405180910390a35060015b92915050565b6000610aae612b5c565b610ab98484846131fd565b949350505050565b600c54600160801b90046001600160801b031690565b6000610ae1612b5c565b610ab9848484613436565b600e6020526000908152604090205481565b6000610b08612b5c565b610b1283836136b1565b9392505050565b60008115610c3e576001600160a01b03841660009081526020819052604090205482811015610b5a5760405162461bcd60e51b815260040161097390615c03565b836001600160a01b0316856001600160a01b031614610c3c576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610be95783811015610bc05760405162461bcd60e51b815260040161097390615acc565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610c0f5760405162461bcd60e51b81526004016109739061592a565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c81919061557a565b60405180910390a35060019392505050565b600854600090610cab906001600160a01b031661394f565b905090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610ce857610ce381613a08565b610d0a565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6008546001600160a01b031681565b60105481565b6003546001600160a01b03163314610d4f5760405162461bcd60e51b815260040161097390615b62565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600b5481565b610d88612b5c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015610de357600080fd5b505afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190614b98565b6011546001600160a01b038216600090815260208190526040902054919250600160801b90046001600160801b031690610e559082613a5c565b6001600160a01b0383166000818152602081905260409081902092909255601180546001600160801b0316905590517fbe641c3ffc44b2d6c184f023fa4ed7bda4b6ffa71e03b3c98ae0c776da1f17e790610eb190849061557a565b60405180910390a25050565b600f6020526000908152604090205481565b600080610eda612b5c565b610ee48484613a7f565b8092508193505050610efa336000601054613d6d565b610f165760405162461bcd60e51b8152600401610973906158b2565b9250929050565b6007546001600160a01b031615610f465760405162461bcd60e51b8152600401610973906158e9565b610f5281830183615173565b805160079060009060089082906009908290610f7590600a9060208a01906149af565b5081546001600160a01b0398891661010092830a908102908a021990911617909155825497871691810a918202918702199097161790558154958416940a93840293830219909416929092179092555060075416610fe55760405162461bcd60e51b8152600401610973906159c0565b50506011805467ffffffffffffffff19166312e687c0179055565b6004546001600160a01b031633811461102b5760405162461bcd60e51b815260040161097390615b97565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b600080611099614a29565b60005b8881101561198e5760008a8a838181106110b257fe5b90506020020160208101906110c7919061535b565b905082602001511580156110de5750600a8160ff16105b156110f3576110eb612b5c565b600160208401525b60ff8116600a141561114d57600080600089898681811061111057fe5b90506020028101906111229190615d50565b81019061112f9190615286565b92509250925061114582826105f4868c8c613ee8565b505050611985565b60ff8116600114156111ae57600080600089898681811061116a57fe5b905060200281019061117c9190615d50565b8101906111899190615286565b9250925092506111a4828261119f868c8c613ee8565b613436565b9750505050611985565b60ff81166002141561120e5760008060008989868181106111cb57fe5b90506020028101906111dd9190615d50565b8101906111ea9190615286565b9250925092506112058282611200868c8c613ee8565b6131fd565b50505050611985565b60ff8116600314156112695760008088888581811061122957fe5b905060200281019061123b9190615d50565b8101906112489190615262565b915091506112608161125b848a8a613ee8565b6136b1565b96505050611985565b60ff8116600414156112c65760008088888581811061128457fe5b90506020028101906112969190615d50565b8101906112a39190615262565b915091506112bb816112b6848a8a613ee8565b613f10565b505060018352611985565b60ff811660051415611329576000808888858181106112e157fe5b90506020028101906112f39190615d50565b8101906113009190615262565b9150915061131881611313848a8a613ee8565b613a7f565b600187529097509550611985915050565b60ff8116600b14156113c857600080600089898681811061134657fe5b90506020028101906113589190615d50565b8101906113659190614fba565b925092509250600080611376610794565b915091508415806113845750815b801561138f57508381115b80156113a257508215806113a257508281115b6113be5760405162461bcd60e51b81526004016109739061587b565b5050505050611985565b60ff8116601814156114a7576000806000806000808c8c898181106113e957fe5b90506020028101906113fb9190615d50565b8101906114089190614bb4565b9550955095509550955095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c0a47c938787878787876040518763ffffffff1660e01b815260040161146a96959493929190615526565b600060405180830381600087803b15801561148457600080fd5b505af1158015611498573d6000803e3d6000fd5b50505050505050505050611985565b60ff81166014141561152f576115258787848181106114c257fe5b90506020028101906114d49190615d50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c915086905081811061151757fe5b90506020020135878761401e565b9095509350611985565b60ff81166015141561159a5761152587878481811061154a57fe5b905060200281019061155c9190615d50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992508891506141149050565b60ff8116601614156116725760008060008989868181106115b757fe5b90506020028101906115c99190615d50565b8101906115d69190614ce3565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc843385611619868e8e613ee8565b6040518563ffffffff1660e01b815260040161163894939291906156ab565b600060405180830381600087803b15801561165257600080fd5b505af1158015611666573d6000803e3d6000fd5b50505050505050611985565b60ff81166017141561170657600060608089898681811061168f57fe5b90506020028101906116a19190615d50565b8101906116ae91906150a1565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fca8843843385856040518563ffffffff1660e01b81526004016116389493929190615709565b60ff8116601e14156117e057606060006117888b8b8681811061172557fe5b905060200201358a8a8781811061173857fe5b905060200281019061174a9190615d50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91506142029050565b915091508060ff16600114156117b357818060200190518101906117ac9190615320565b96506117d9565b8060ff16600214156117d957818060200190518101906117d39190615338565b90975095505b5050611985565b60ff8116600614156119085760008787848181106117fa57fe5b905060200281019061180c9190615d50565b810190611819919061524a565b6008549091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163da5139ca9116611890611860858b8b613ee8565b60408051808201909152600d546001600160801b038082168352600160801b9091041660208201529060016143b8565b60016040518463ffffffff1660e01b81526004016118b0939291906157ce565b60206040518083038186803b1580156118c857600080fd5b505afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190615320565b955050611985565b60ff81166007141561198557600087878481811061192257fe5b90506020028101906119349190615d50565b810190611941919061524a565b9050611981611951828888613ee8565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906000614451565b9550505b5060010161109c565b508051156119c0576119a4336000601054613d6d565b6119c05760405162461bcd60e51b8152600401610973906158b2565b50965096945050505050565b60006020819052908152604090205481565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611a645780601f10611a3957610100808354040283529160200191611a64565b820191906000526020600020905b815481529060010190602001808311611a4757829003601f168201915b505050505081565b6000611a76610794565b915050611a81612b5c565b6000806000611a8e614a29565b5060408051808201909152600d546001600160801b038082168352600160801b909104166020820152611abf614a29565b600754604051634ffe34db60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692634ffe34db92611b12929190911690600401615512565b604080518083038186803b158015611b2957600080fd5b505afa158015611b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6191906152de565b905060005b8c811015611d885760008e8e83818110611b7c57fe5b9050602002016020810190611b919190614b7c565b9050611b9e818a8a613d6d565b611d7f576001600160a01b0381166000908152600f6020526040812054808f8f86818110611bc857fe5b9050602002013511611bec578e8e85818110611be057fe5b90506020020135611bee565b805b9150611bfa81836144ca565b6001600160a01b0384166000908152600f60205260408120919091559050611c238683836143b8565b90506000611c5e69152d02c7e14af6800000611c4c8d611c46866201b5806144ed565b906144ed565b81611c5357fe5b889190046000614451565b6001600160a01b0385166000908152600e6020526040902054909150611c8490826144ca565b6001600160a01b038086166000908152600e60205260409020919091558d1615611cae578c611cb0565b8d5b6001600160a01b0316846001600160a01b03167f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c40283604051611cf2919061557a565b60405180910390a36001600160a01b03808516908e1615611d13578d611d15565b335b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8486604051611d4f929190615cf2565b60405180910390a3611d618a82613a5c565b9950611d6d8983613a5c565b9850611d798884613a5c565b97505050505b50600101611b66565b5083611da65760405162461bcd60e51b815260040161097390615c6a565b611dc3611db285614524565b83516001600160801b031690614551565b6001600160801b03168252611dee611dda84614524565b60208401516001600160801b031690614551565b6001600160801b03908116602084018190528351600d80546001600160801b03191691841691909117909216600160801b909102179055600b54611e3290866144ca565b600b55600854604051636d289ce560e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92611e8d92169089906001906004016157ce565b60206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd9190615320565b90508761237257604051634656bfdf60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638cad7fbe90611f30908c90600401615512565b60206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f809190614f71565b611f9c5760405162461bcd60e51b815260040161097390615b2b565b600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92611ff592919091169030908e908c906004016156ab565b600060405180830381600087803b15801561200f57600080fd5b505af1158015612023573d6000803e3d6000fd5b50506007546008546040516371a1ff0960e11b81526001600160a01b03808f16955063e343fe129450612063938116921690309087908d906004016156d5565b6040805180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190615338565b5050600c54600854604051633de222bb60e21b8152600092612177926001600160801b03909116916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec926121219291909116903090600401615691565b60206040518083038186803b15801561213957600080fd5b505afa15801561214d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121719190615320565b906144ca565b9050600061218582846144ca565b90506000620186a0612199836127106144ed565b816121a057fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc600860009054906101000a90046001600160a01b0316307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561224257600080fd5b505afa158015612256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227a9190614b98565b856040518563ffffffff1660e01b815260040161229a94939291906156ab565b600060405180830381600087803b1580156122b457600080fd5b505af11580156122c8573d6000803e3d6000fd5b505050506122fc6122ea6122e583866144ca90919063ffffffff16565b614524565b600c546001600160801b031690614580565b600c80546001600160801b0319166001600160801b0392909216919091179055306001600160a01b038d167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e3861235285856144ca565b6000604051612362929190615cf2565b60405180910390a3505050612566565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163f18d03cc919081169030908d16156123ba578c6123bc565b8d5b8a6040518563ffffffff1660e01b81526004016123dc94939291906156ab565b600060405180830381600087803b1580156123f657600080fd5b505af115801561240a573d6000803e3d6000fd5b505050506001600160a01b038916156124ae576007546008546040516371a1ff0960e11b81526001600160a01b03808d169363e343fe129361245a93918316921690339087908d906004016156d5565b6040805180830381600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab9190615338565b50505b600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc926125079291909116903390309087906004016156ab565b600060405180830381600087803b15801561252157600080fd5b505af1158015612535573d6000803e3d6000fd5b505050506125456122ea82614524565b600c80546001600160801b0319166001600160801b03929092169190911790555b5050505050505050505050505050565b6009546001600160a01b031681565b60026020526000908152604090205481565b600d546001600160801b0380821691600160801b90041682565b6001600160a01b0383166000908152600e60205260409020546125d49082613a5c565b6001600160a01b0384166000908152600e6020526040902055600b546125fa8183613a5c565b600b55600754612615906001600160a01b03168383866145af565b836001600160a01b03168361262a573361264c565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f9ed03113de523cebfe5e49d5f8e12894b1c0d42ce805990461726444c90eab8784604051612684919061557a565b60405180910390a350505050565b61269a612b5c565b6126a48282613f10565b6126b2336000601054613d6d565b6126ce5760405162461bcd60e51b8152600401610973906158b2565b5050565b60066020526000908152604090205460ff1681565b6003546001600160a01b031681565b60075460609061270e906001600160a01b03166146b6565b600854612723906001600160a01b03166146b6565b60095460405163634ce26b60e11b81526001600160a01b039091169063c699c4d69061275490600a90600401615607565b60006040518083038186803b15801561276c57600080fd5b505afa158015612780573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127a891908101906152ac565b604051602001610935939291906154a5565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081156128785733600090815260208190526040902054828110156128165760405162461bcd60e51b815260040161097390615c03565b336001600160a01b03851614612876576001600160a01b03841661284c5760405162461bcd60e51b81526004016109739061592a565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a92919061557a565b6011546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0387166129325760405162461bcd60e51b815260040161097390615bcc565b8342106129515760405162461bcd60e51b815260040161097390615b03565b6001600160a01b03871660008181526002602090815260409182902080546001818101909255925190926129cf926129b4927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e9101615583565b604051602081830303815290604052805190602001206146fd565b858585604051600081526020016040526040516129ef94939291906155d6565b6020604051602081039080840390855afa158015612a11573d6000803e3d6000fd5b505050602060405103516001600160a01b031614612a415760405162461bcd60e51b815260040161097390615ca1565b6001600160a01b038088166000818152600160209081526040808320948b168084529490915290819020889055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612a9c90899061557a565b60405180910390a350505050505050565b6007546001600160a01b031681565b600160209081526000928352604080842090915290825290205481565b6004546001600160a01b031681565b6003546001600160a01b03163314612b125760405162461bcd60e51b815260040161097390615b62565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fcf1d3f17e521c635e0d20b8acba94ba170afc041d0546d46dafa09d3c9c19eb390600090a250565b612b64614a40565b50604080516060810182526011546001600160401b038082168352600160401b82041660208301819052600160801b9091046001600160801b03169282019290925290420380612bb557505061311c565b6001600160401b0342166020830152612bcc614a29565b5060408051808201909152600d546001600160801b038082168352600160801b9091041660208201819052612cbe5782516001600160401b03166312e687c014612c56576312e687c08084526040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b91612c4d91600091829182906157f1565b60405180910390a15b5050805160118054602084015160409094015167ffffffffffffffff199091166001600160401b039384161767ffffffffffffffff60401b1916600160401b9390941692909202929092176001600160801b03908116600160801b919092160217905561311c565b600080612cc9614a29565b5060408051808201909152600c546001600160801b038082168352600160801b9091048116602083015286518551670de0b6b3a764000092612d1b928992611c469216906001600160401b03166144ed565b81612d2257fe5b049250612d42612d3184614524565b85516001600160801b031690614580565b6001600160801b03168085526008548251604051630acc462360e31b8152600093612e039390926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635662311893612dad939216919088906004016157a2565b60206040518083038186803b158015612dc557600080fd5b505afa158015612dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfd9190615320565b90613a5c565b90506000620186a0612e17866127106144ed565b81612e1e57fe5b04905081612e4284602001516001600160801b0316836144ed90919063ffffffff16565b81612e4957fe5b049350612e6c612e5885614524565b60408a01516001600160801b031690614580565b6001600160801b03166040890152612e9a612e8685614524565b60208501516001600160801b031690614580565b600c80546001600160801b03908116600160801b9382168402179091558751600d805460208b01516001600160801b031990911692841692831784169316909302919091179091556000908390612ef990670de0b6b3a76400006144ed565b81612f0057fe5b0490506709b6e64a8ec60000811015612fc25760006709b6e64a8ec60000612f34670de0b6b3a7640000611c4683866144ca565b81612f3b57fe5b0490506000612f69612f518b611c4685806144ed565b7054a2b63d65d79d094abb6688000000000090613a5c565b8b519091508190612f94906001600160401b03167054a2b63d65d79d094abb668800000000006144ed565b81612f9b57fe5b046001600160401b0316808c526304b9a1f01115612fbb576304b9a1f08b525b5050613073565b670b1a2bc2ec5000008111156130735760006702c68af0bb140000612ffb670de0b6b3a7640000611c4685670b1a2bc2ec5000006144ca565b8161300257fe5b0490506000613018612f518b611c4685806144ed565b8b519091506000907054a2b63d65d79d094abb6688000000000090613046906001600160401b0316846144ed565b8161304d57fe5b0490506449d482460081111561306557506449d48246005b6001600160401b03168b5250505b88516040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b916130a9918991899186906157f1565b60405180910390a1505086516011805460208a01516040909a015167ffffffffffffffff199091166001600160401b039384161767ffffffffffffffff60401b1916600160401b93909a1692909202989098176001600160801b03908116600160801b9190921602179096555050505050505b565b600c546001600160801b0380821691600160801b90041682565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b179052905160609160009183916001600160a01b0386169161317f91906153bf565b600060405180830381855afa9150503d80600081146131ba576040519150601f19603f3d011682016040523d82523d6000602084013e6131bf565b606091505b5091509150816131ea57604051806040016040528060038152602001623f3f3f60e81b8152506131f3565b6131f381614735565b925050505b919050565b60408051808201909152600d546001600160801b038082168352600160801b9091041660208201526000906132349083600161489a565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b0386166000908152600f90925260409091205490915061329290836144ca565b6001600160a01b038086166000908152600f6020526040808220939093556008549251636d289ce560e11b815290927f000000000000000000000000000000000000000000000000000000000000000083169263da5139ca92613300929091169086906001906004016157ce565b60206040518083038186803b15801561331857600080fd5b505afa15801561332c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133509190615320565b600c546008549192506001600160801b031690613378906001600160a01b03168383886145af565b61339461338483614524565b6001600160801b03831690614580565b600c80546001600160801b0319166001600160801b03929092169190911790556001600160a01b038616856133c957336133eb565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8587604051613425929190615cf2565b60405180910390a350509392505050565b6000613440614a29565b50604080518082018252600c546001600160801b03808216808452600160801b90920481166020840152600854600d549451636d289ce560e11b8152939492936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca946134c99492169216906001906004016157a2565b60206040518083038186803b1580156134e157600080fd5b505afa1580156134f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135199190615320565b83516001600160801b0316019050801561355b578061354e84602001516001600160801b0316876144ed90919063ffffffff16565b8161355557fe5b0461355d565b845b93506103e861358261356e86614524565b60208601516001600160801b031690614580565b6001600160801b0316101561359d5760009350505050610b12565b6135a883868661490f565b8051600c80546020938401516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b03881660009081529081905260409020546136019085613a5c565b6001600160a01b0380891660009081526020819052604090209190915560085461362e91168684896145af565b866001600160a01b0316866136435733613665565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e38878760405161369f929190615cf2565b60405180910390a35050509392505050565b60006136bb614a29565b50604080518082018252600c546001600160801b038082168352600160801b90910481166020830152600854600d549351636d289ce560e11b815292936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca94613742949216929116906001906004016157a2565b60206040518083038186803b15801561375a57600080fd5b505afa15801561376e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137929190615320565b825160208401516001600160801b03918216929092019250166137b585836144ed565b816137bc57fe5b3360009081526020819052604090205491900493506137db90856144ca565b336000908152602081905260409020556137f7611db284614524565b6001600160801b0316825261380e611dda85614524565b6001600160801b0316602083018190526103e8111561383f5760405162461bcd60e51b815260040161097390615844565b8151600c805460208501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556040516001600160a01b0386169033907f6e853a5fd6b51d773691f542ebac8513c9992a51380d4c342031056a64114228906138b49087908990615cf2565b60405180910390a3600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc9261391592919091169030908a9089906004016156ab565b600060405180830381600087803b15801561392f57600080fd5b505af1158015613943573d6000803e3d6000fd5b50505050505092915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b0386169161399691906153bf565b600060405180830381855afa9150503d80600081146139d1576040519150601f19603f3d011682016040523d82523d6000602084013e6139d6565b606091505b50915091508180156139e9575080516020145b6139f45760126131f3565b808060200190518101906131f39190615377565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692188230604051602001613a3f939291906155b7565b604051602081830303815290604052805190602001209050919050565b81810181811015610a9e5760405162461bcd60e51b815260040161097390615a5e565b60008080620186a0613a928560326144ed565b81613a9957fe5b049050613ad9613aa98583613a5c565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906001614950565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b03199092169190911716919091179055336000908152600f909252604090912054909350613b2e9084613a5c565b336000818152600f6020526040908190209290925590516001600160a01b03871691907f3a5151e57d3bc9798e7853034ac52293d1a0e12a2b44725e75b03b21f86477a690613b8290889086908990615d00565b60405180910390a3600854604051636d289ce560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92613be292919091169088906000906004016157ce565b60206040518083038186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c329190615320565b9150613c3c614a29565b5060408051808201909152600c546001600160801b038082168352600160801b90910416602082018190526103e81115613c885760405162461bcd60e51b815260040161097390615844565b613ca5613c9484614524565b82516001600160801b031690614551565b6001600160801b03908116808352600c805460208501518416600160801b026001600160801b0319909116909217909216179055600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613d3292919091169030908b9089906004016156ab565b600060405180830381600087803b158015613d4c57600080fd5b505af1158015613d60573d6000803e3d6000fd5b5050505050509250929050565b6001600160a01b0383166000908152600f602052604081205480613d95576001915050610b12565b6001600160a01b0385166000908152600e602052604090205480613dbe57600092505050610b12565b613dc6614a29565b5060408051808201909152600d546001600160801b03808216808452600160801b909204166020830181905290613e04908790611c469087906144ed565b81613e0b57fe5b600754919004906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163566231189116613e6b8a613e5657620124f8613e5b565b62012cc85b611c46886509184e72a0006144ed565b60006040518463ffffffff1660e01b8152600401613e8b939291906157ce565b60206040518083038186803b158015613ea357600080fd5b505afa158015613eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edb9190615320565b1015979650505050505050565b600080841215613f08576000198414613f015781613f03565b825b610ab9565b509192915050565b336000908152600e6020526040902054613f2a90826144ca565b336000908152600e6020526040902055600b54613f4790826144ca565b600b556040516001600160a01b0383169033907f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c40290613f8790859061557a565b60405180910390a3600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613fe89291909116903090879087906004016156ab565b600060405180830381600087803b15801561400257600080fd5b505af1158015614016573d6000803e3d6000fd5b505050505050565b6000806000806000808980602001905181019061403b919061505a565b935093509350935061404e828989613ee8565b915061405b818989613ee8565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302b9446c8a86338787876040518763ffffffff1660e01b81526004016140b29594939291906156d5565b60408051808303818588803b1580156140ca57600080fd5b505af11580156140de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141039190615338565b955095505050505094509492505050565b60008060008060008088806020019051810190614131919061505a565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d30853386614176878e8e613ee8565b614181878f8f613ee8565b6040518663ffffffff1660e01b81526004016141a19594939291906156d5565b6040805180830381600087803b1580156141ba57600080fd5b505af11580156141ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f29190615338565b9550955050505050935093915050565b606060008060606000806000898060200190518101906142229190614c21565b94509450945094509450828015614237575081155b1561426557838960405160200161424f9291906153db565b60405160208183030381529060405293506142be565b821580156142705750815b1561428857838860405160200161424f9291906153db565b8280156142925750815b156142be578389896040516020016142ac939291906153fd565b60405160208183030381529060405293505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415801561430957506001600160a01b0385163014155b6143255760405162461bcd60e51b815260040161097390615a95565b60006060866001600160a01b03168d8760405161434291906153bf565b60006040518083038185875af1925050503d806000811461437f576040519150601f19603f3d011682016040523d82523d6000602084013e614384565b606091505b5091509150816143a65760405162461bcd60e51b8152600401610973906159f0565b9c919b50909950505050505050505050565b600083602001516001600160801b0316600014156143d7575081610b12565b602084015184516001600160801b03918216916143f6918691166144ed565b816143fd57fe5b04905081801561444157508284600001516001600160801b031661443786602001516001600160801b0316846144ed90919063ffffffff16565b8161443e57fe5b04105b15610b1257610ab9816001613a5c565b82516000906001600160801b031661446a575081610b12565b835160208501516001600160801b0391821691614489918691166144ed565b8161449057fe5b04905081801561444157508284602001516001600160801b031661443786600001516001600160801b0316846144ed90919063ffffffff16565b80820382811115610a9e5760405162461bcd60e51b815260040161097390615815565b60008115806145085750508082028282828161450557fe5b04145b610a9e5760405162461bcd60e51b815260040161097390615c33565b60006001600160801b0382111561454d5760405162461bcd60e51b815260040161097390615a27565b5090565b8082036001600160801b038084169082161115610a9e5760405162461bcd60e51b815260040161097390615815565b8181016001600160801b038083169082161015610a9e5760405162461bcd60e51b815260040161097390615a5e565b801561462b57614607827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f7888aec87306040518363ffffffff1660e01b8152600401612121929190615691565b8311156146265760405162461bcd60e51b81526004016109739061595a565b6146b0565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc9061467d9087903390309089906004016156ab565b600060405180830381600087803b15801561469757600080fd5b505af11580156146ab573d6000803e3d6000fd5b505050505b50505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161317f91906153bf565b600060405180604001604052806002815260200161190160f01b815250614722610cb0565b83604051602001613a3f939291906153fd565b6060604082511061475b578180602001905181019061475491906152ac565b90506131f8565b81516020141561487a5760005b60208160ff161080156147975750828160ff168151811061478557fe5b01602001516001600160f81b03191615155b156147a457600101614768565b60608160ff166001600160401b03811180156147bf57600080fd5b506040519080825280601f01601f1916602001820160405280156147ea576020820181803683370190505b509050600091505b60208260ff161080156148215750838260ff168151811061480f57fe5b01602001516001600160f81b03191615155b1561487157838260ff168151811061483557fe5b602001015160f81c60f81b818360ff168151811061484f57fe5b60200101906001600160f81b031916908160001a9053506001909101906147f2565b91506131f89050565b506040805180820190915260038152623f3f3f60e81b60208201526131f8565b6148a2614a29565b60006148af8585856143b8565b90506148ce6148bd82614524565b86516001600160801b031690614551565b6001600160801b031685526148f96148e585614524565b60208701516001600160801b031690614551565b6001600160801b03166020860152939492505050565b614917614a29565b614923612d3184614524565b6001600160801b0316845261493a61356e83614524565b6001600160801b03166020850152509192915050565b614958614a29565b6000614965858585614451565b905061498461497385614524565b86516001600160801b031690614580565b6001600160801b031685526148f961499b82614524565b60208701516001600160801b031690614580565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149f057805160ff1916838001178555614a1d565b82800160010185558215614a1d579182015b82811115614a1d578251825591602001919060010190614a02565b5061454d929150614a60565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b5b8082111561454d5760008155600101614a61565b8035610a9e81615e34565b60008083601f840112614a91578182fd5b5081356001600160401b03811115614aa7578182fd5b6020830191508360208083028501011115610f1657600080fd5b600082601f830112614ad1578081fd5b8135614ae4614adf82615dba565b615d94565b818152915060208083019084810181840286018201871015614b0557600080fd5b60005b84811015614b2457813584529282019290820190600101614b08565b505050505092915050565b600082601f830112614b3f578081fd5b8151614b4d614adf82615dd9565b9150808252836020828501011115614b6457600080fd5b614b75816020840160208601615e08565b5092915050565b600060208284031215614b8d578081fd5b8135610b1281615e34565b600060208284031215614ba9578081fd5b8151610b1281615e34565b60008060008060008060c08789031215614bcc578182fd5b8635614bd781615e34565b95506020870135614be781615e34565b94506040870135614bf781615e4c565b93506060870135614c0781615e6f565b9598949750929560808101359460a0909101359350915050565b600080600080600060a08688031215614c38578283fd5b8551614c4381615e34565b60208701519095506001600160401b03811115614c5e578384fd5b614c6a88828901614b2f565b9450506040860151614c7b81615e4c565b6060870151909350614c8c81615e4c565b6080870151909250614c9d81615e6f565b809150509295509295909350565b60008060408385031215614cbd578182fd5b8235614cc881615e34565b91506020830135614cd881615e34565b809150509250929050565b600080600060608486031215614cf7578081fd5b8335614d0281615e34565b92506020840135614d1281615e34565b929592945050506040919091013590565b600080600080600080600060e0888a031215614d3d578485fd5b8735614d4881615e34565b96506020880135614d5881615e34565b955060408801359450606088013593506080880135614d7681615e6f565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614da7578081fd5b8335614db281615e34565b92506020840135614dc281615e4c565b91506040840135614dd281615e4c565b809150509250925092565b600080600060608486031215614df1578081fd5b8335614dfc81615e34565b92506020840135614d1281615e4c565b60008060408385031215614e1e578182fd5b8235614e2981615e34565b946020939093013593505050565b600080600080600080600060a0888a031215614e51578081fd5b87356001600160401b0380821115614e67578283fd5b614e738b838c01614a80565b909950975060208a0135915080821115614e8b578283fd5b50614e988a828b01614a80565b9096509450506040880135614eac81615e34565b92506060880135614ebc81615e34565b91506080880135614ecc81615e4c565b8091505092959891949750929550565b60008060008060008060608789031215614ef4578384fd5b86356001600160401b0380821115614f0a578586fd5b614f168a838b01614a80565b90985096506020890135915080821115614f2e578586fd5b614f3a8a838b01614a80565b90965094506040890135915080821115614f52578384fd5b50614f5f89828a01614a80565b979a9699509497509295939492505050565b600060208284031215614f82578081fd5b8151610b1281615e4c565b60008060408385031215614f9f578182fd5b8251614faa81615e4c565b6020939093015192949293505050565b600080600060608486031215614fce578081fd5b8335614fd981615e4c565b95602085013595506040909401359392505050565b60008060208385031215615000578182fd5b82356001600160401b0380821115615016578384fd5b818501915085601f830112615029578384fd5b813581811115615037578485fd5b866020828501011115615048578485fd5b60209290920196919550909350505050565b6000806000806080858703121561506f578182fd5b845161507a81615e34565b602086015190945061508b81615e34565b6040860151606090960151949790965092505050565b6000806000606084860312156150b5578081fd5b83356150c081615e34565b92506020848101356001600160401b03808211156150dc578384fd5b818701915087601f8301126150ef578384fd5b81356150fd614adf82615dba565b81815284810190848601868402860187018c1015615119578788fd5b8795505b838610156151435761512f8c82614a75565b83526001959095019491860191860161511d565b5096505050604087013592508083111561515b578384fd5b505061516986828701614ac1565b9150509250925092565b60008060008060808587031215615188578182fd5b843561519381615e34565b935060208501356151a381615e34565b925060408501356151b381615e34565b915060608501356001600160401b038111156151cd578182fd5b8501601f810187136151dd578182fd5b80356151eb614adf82615dd9565b8181528860208385010111156151ff578384fd5b81602084016020830137908101602001929092525092959194509250565b6000806040838503121561522f578182fd5b823561523a81615e34565b91506020830135614cd881615e4c565b60006020828403121561525b578081fd5b5035919050565b60008060408385031215615274578182fd5b823591506020830135614cd881615e34565b60008060006060848603121561529a578081fd5b833592506020840135614dc281615e34565b6000602082840312156152bd578081fd5b81516001600160401b038111156152d2578182fd5b610ab984828501614b2f565b6000604082840312156152ef578081fd5b6152f96040615d94565b825161530481615e5a565b8152602083015161531481615e5a565b60208201529392505050565b600060208284031215615331578081fd5b5051919050565b6000806040838503121561534a578182fd5b505080516020909101519092909150565b60006020828403121561536c578081fd5b8135610b1281615e6f565b600060208284031215615388578081fd5b8151610b1281615e6f565b600081518084526153ab816020860160208601615e08565b601f01601f19169290920160200192915050565b600082516153d1818460208701615e08565b9190910192915050565b600083516153ed818460208801615e08565b9190910191825250602001919050565b6000845161540f818460208901615e08565b91909101928352506020820152604001919050565b600075023b7b632102b32b4b71026b2b234bab6902934b9b5960551b82528451615455816016850160208901615e08565b602f60f81b6016918401918201528451615476816017840160208901615e08565b602d60f81b601792909101918201528351615498816018840160208801615e08565b0160180195945050505050565b6000616b6d60f01b825284516154c2816002850160208901615e08565b602f60f81b60029184019182015284516154e3816003840160208901615e08565b602d60f81b600392909101918201528351615505816004840160208801615e08565b0160040195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152949095166020850152911515604084015260ff166060830152608082015260a081019190915260c00190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610b126020830184615393565b6000602080830181845282855460018082166000811461562e576001811461564c57615684565b60028304607f16855260ff1983166040890152606088019350615684565b6002830480865261565c8a615dfc565b885b8281101561567a5781548b82016040015290840190880161565e565b8a01604001955050505b5091979650505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b60006080820160018060a01b0380881684526020818816818601526080604086015282875180855260a0870191508289019450855b8181101561575c57855185168352948301949183019160010161573e565b50508581036060870152865180825290820193509150808601845b8381101561579357815185529382019390820190600101615777565b50929998505050505050505050565b6001600160a01b039390931683526001600160801b039190911660208301521515604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b93845260208401929092526001600160401b03166040830152606082015260800190565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b60208082526017908201527f476f6c645665696e3a2062656c6f77206d696e696d756d000000000000000000604082015260600190565b60208082526019908201527f476f6c645665696e506169723a2072617465206e6f74206f6b00000000000000604082015260600190565b6020808252601c908201527f476f6c645665696e506169723a207573657220696e736f6c76656e7400000000604082015260600190565b60208082526021908201527f476f6c645665696e506169723a20616c726561647920696e697469616c697a656040820152601960fa1b606082015260800190565b60208082526016908201527545524332303a206e6f207a65726f206164647265737360501b604082015260600190565b6020808252601b908201527f476f6c645665696e506169723a20536b696d20746f6f206d7563680000000000604082015260600190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526016908201527523b7b6322b32b4b72830b4b91d103130b2103830b4b960511b604082015260600190565b60208082526019908201527f476f6c645665696e506169723a2063616c6c206661696c656400000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526018908201527f476f6c645665696e506169723a2063616e27742063616c6c0000000000000000604082015260600190565b60208082526018908201527f45524332303a20616c6c6f77616e636520746f6f206c6f770000000000000000604082015260600190565b6020808252600e908201526d115490cc8c0e88115e1c1a5c995960921b604082015260600190565b6020808252601d908201527f476f6c645665696e506169723a20496e76616c69642073776170706572000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b60208082526018908201527f45524332303a204f776e65722063616e6e6f7420626520300000000000000000604082015260600190565b60208082526016908201527545524332303a2062616c616e636520746f6f206c6f7760501b604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252601d908201527f476f6c645665696e506169723a20616c6c2061726520736f6c76656e74000000604082015260600190565b60208082526018908201527f45524332303a20496e76616c6964205369676e61747572650000000000000000604082015260600190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b60ff91909116815260200190565b6000808335601e19843603018112615d66578283fd5b8301803591506001600160401b03821115615d7f578283fd5b602001915036819003821315610f1657600080fd5b6040518181016001600160401b0381118282101715615db257600080fd5b604052919050565b60006001600160401b03821115615dcf578081fd5b5060209081020190565b60006001600160401b03821115615dee578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b83811015615e23578181015183820152602001615e0b565b838111156146b05750506000910152565b6001600160a01b0381168114615e4957600080fd5b50565b8015158114615e4957600080fd5b6001600160801b0381168114615e4957600080fd5b60ff81168114615e4957600080fdfea2646970667358221220c416ed3d1fa7bc0b344c118da25f3a080125d64fb614f8bb210bf87a7be313e464736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106102725760003560e01c8063656f3d641161014f57806395d89b41116100c1578063d8dfeb451161007a578063d8dfeb45146106f1578063dd62ed3e14610706578063e30c397814610726578063f46901ed1461073b578063f8ba4cff1461075b578063f9557ccb1461077057610272565b806395d89b411461064e578063a2c9a96914610663578063a9059cbb14610678578063b27c0e7414610698578063cd446e22146106bc578063d505accf146106d157610272565b80637ecebe00116101135780637ecebe00146105965780638285ef40146105b6578063860ffea1146105d9578063876467f8146105f95780638cad7fbe146106195780638da5cb5b1461063957610272565b8063656f3d641461051957806370a082311461052c57806374645ff31461054c57806376ee101b146105615780637dc0d1d01461058157610272565b8063313ce567116101e8578063473e3ce7116101ac578063473e3ce714610479578063476343ee1461048e57806348e4163e146104a35780634b8a3529146104c35780634ddf47d4146104f15780634e71e0c81461050457610272565b8063313ce567146103f85780633644e5151461041a57806338d52e0f1461042f5780633ba0b9a9146104445780633f2617cb1461045957610272565b806315294c401161023a57806315294c401461033657806318160ddd146103635780631b51e940146103785780631c9e379b146103985780632317ef67146103b857806323b872dd146103d857610272565b8063017e7e581461027757806302ce728f146102a257806306fdde03146102c5578063078dfbe7146102e7578063095ea7b314610309575b600080fd5b34801561028357600080fd5b5061028c610785565b6040516102999190615512565b60405180910390f35b3480156102ae57600080fd5b506102b7610794565b60405161029992919061556a565b3480156102d157600080fd5b506102da610871565b60405161029991906155f4565b3480156102f357600080fd5b50610307610302366004614d93565b610949565b005b34801561031557600080fd5b50610329610324366004614e0c565b610a39565b604051610299919061555f565b34801561034257600080fd5b50610356610351366004614ddd565b610aa4565b604051610299919061557a565b34801561036f57600080fd5b50610356610ac1565b34801561038457600080fd5b50610356610393366004614ddd565b610ad7565b3480156103a457600080fd5b506103566103b3366004614b7c565b610aec565b3480156103c457600080fd5b506103566103d3366004614e0c565b610afe565b3480156103e457600080fd5b506103296103f3366004614ce3565b610b19565b34801561040457600080fd5b5061040d610c93565b6040516102999190615d42565b34801561042657600080fd5b50610356610cb0565b34801561043b57600080fd5b5061028c610d10565b34801561045057600080fd5b50610356610d1f565b34801561046557600080fd5b5061030761047436600461521d565b610d25565b34801561048557600080fd5b50610356610d7a565b34801561049a57600080fd5b50610307610d80565b3480156104af57600080fd5b506103566104be366004614b7c565b610ebd565b3480156104cf57600080fd5b506104e36104de366004614e0c565b610ecf565b604051610299929190615cf2565b6103076104ff366004614fee565b610f1d565b34801561051057600080fd5b50610307611000565b6104e3610527366004614edc565b61108e565b34801561053857600080fd5b50610356610547366004614b7c565b6119cc565b34801561055857600080fd5b506102da6119de565b34801561056d57600080fd5b5061030761057c366004614e37565b611a6c565b34801561058d57600080fd5b5061028c612576565b3480156105a257600080fd5b506103566105b1366004614b7c565b612585565b3480156105c257600080fd5b506105cb612597565b604051610299929190615cd8565b3480156105e557600080fd5b506103076105f4366004614ddd565b6125b1565b34801561060557600080fd5b50610307610614366004614e0c565b612692565b34801561062557600080fd5b50610329610634366004614b7c565b6126d2565b34801561064557600080fd5b5061028c6126e7565b34801561065a57600080fd5b506102da6126f6565b34801561066f57600080fd5b5061028c6127ba565b34801561068457600080fd5b50610329610693366004614e0c565b6127de565b3480156106a457600080fd5b506106ad6128bb565b60405161029993929190615d16565b3480156106c857600080fd5b5061028c6128e8565b3480156106dd57600080fd5b506103076106ec366004614d23565b61290c565b3480156106fd57600080fd5b5061028c612aad565b34801561071257600080fd5b50610356610721366004614cab565b612abc565b34801561073257600080fd5b5061028c612ad9565b34801561074757600080fd5b50610307610756366004614b7c565b612ae8565b34801561076757600080fd5b50610307612b5c565b34801561077c57600080fd5b506105cb61311e565b6005546001600160a01b031681565b60095460405163d6d7d52560e01b815260009182916001600160a01b039091169063d6d7d525906107ca90600a90600401615607565b6040805180830381600087803b1580156107e357600080fd5b505af11580156107f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081b9190614f8d565b909250905081156108685760108190556040517f9f9192b5edb17356c524e08d9e025c8e2f6307e6ea52fb7968faa3081f51c3c89061085b90839061557a565b60405180910390a161086d565b506010545b9091565b600754606090610889906001600160a01b0316613138565b60085461089e906001600160a01b0316613138565b60095460405163355a219b60e21b81526001600160a01b039091169063d568866c906108cf90600a90600401615607565b60006040518083038186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261092391908101906152ac565b60405160200161093593929190615424565b604051602081830303815290604052905090565b6003546001600160a01b0316331461097c5760405162461bcd60e51b815260040161097390615b62565b60405180910390fd5b8115610a18576001600160a01b0383161515806109965750805b6109b25760405162461bcd60e51b815260040161097390615991565b6003546040516001600160a01b038086169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0385166001600160a01b031991821617909155600480549091169055610a34565b600480546001600160a01b0319166001600160a01b0385161790555b505050565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a9290869061557a565b60405180910390a35060015b92915050565b6000610aae612b5c565b610ab98484846131fd565b949350505050565b600c54600160801b90046001600160801b031690565b6000610ae1612b5c565b610ab9848484613436565b600e6020526000908152604090205481565b6000610b08612b5c565b610b1283836136b1565b9392505050565b60008115610c3e576001600160a01b03841660009081526020819052604090205482811015610b5a5760405162461bcd60e51b815260040161097390615c03565b836001600160a01b0316856001600160a01b031614610c3c576001600160a01b03851660009081526001602090815260408083203384529091529020546000198114610be95783811015610bc05760405162461bcd60e51b815260040161097390615acc565b6001600160a01b0386166000908152600160209081526040808320338452909152902084820390555b6001600160a01b038516610c0f5760405162461bcd60e51b81526004016109739061592a565b506001600160a01b0380861660009081526020819052604080822086850390559186168152208054840190555b505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c81919061557a565b60405180910390a35060019392505050565b600854600090610cab906001600160a01b031661394f565b905090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610ce857610ce381613a08565b610d0a565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b6008546001600160a01b031681565b60105481565b6003546001600160a01b03163314610d4f5760405162461bcd60e51b815260040161097390615b62565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600b5481565b610d88612b5c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015610de357600080fd5b505afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190614b98565b6011546001600160a01b038216600090815260208190526040902054919250600160801b90046001600160801b031690610e559082613a5c565b6001600160a01b0383166000818152602081905260409081902092909255601180546001600160801b0316905590517fbe641c3ffc44b2d6c184f023fa4ed7bda4b6ffa71e03b3c98ae0c776da1f17e790610eb190849061557a565b60405180910390a25050565b600f6020526000908152604090205481565b600080610eda612b5c565b610ee48484613a7f565b8092508193505050610efa336000601054613d6d565b610f165760405162461bcd60e51b8152600401610973906158b2565b9250929050565b6007546001600160a01b031615610f465760405162461bcd60e51b8152600401610973906158e9565b610f5281830183615173565b805160079060009060089082906009908290610f7590600a9060208a01906149af565b5081546001600160a01b0398891661010092830a908102908a021990911617909155825497871691810a918202918702199097161790558154958416940a93840293830219909416929092179092555060075416610fe55760405162461bcd60e51b8152600401610973906159c0565b50506011805467ffffffffffffffff19166312e687c0179055565b6004546001600160a01b031633811461102b5760405162461bcd60e51b815260040161097390615b97565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b039092166001600160a01b0319928316179055600480549091169055565b600080611099614a29565b60005b8881101561198e5760008a8a838181106110b257fe5b90506020020160208101906110c7919061535b565b905082602001511580156110de5750600a8160ff16105b156110f3576110eb612b5c565b600160208401525b60ff8116600a141561114d57600080600089898681811061111057fe5b90506020028101906111229190615d50565b81019061112f9190615286565b92509250925061114582826105f4868c8c613ee8565b505050611985565b60ff8116600114156111ae57600080600089898681811061116a57fe5b905060200281019061117c9190615d50565b8101906111899190615286565b9250925092506111a4828261119f868c8c613ee8565b613436565b9750505050611985565b60ff81166002141561120e5760008060008989868181106111cb57fe5b90506020028101906111dd9190615d50565b8101906111ea9190615286565b9250925092506112058282611200868c8c613ee8565b6131fd565b50505050611985565b60ff8116600314156112695760008088888581811061122957fe5b905060200281019061123b9190615d50565b8101906112489190615262565b915091506112608161125b848a8a613ee8565b6136b1565b96505050611985565b60ff8116600414156112c65760008088888581811061128457fe5b90506020028101906112969190615d50565b8101906112a39190615262565b915091506112bb816112b6848a8a613ee8565b613f10565b505060018352611985565b60ff811660051415611329576000808888858181106112e157fe5b90506020028101906112f39190615d50565b8101906113009190615262565b9150915061131881611313848a8a613ee8565b613a7f565b600187529097509550611985915050565b60ff8116600b14156113c857600080600089898681811061134657fe5b90506020028101906113589190615d50565b8101906113659190614fba565b925092509250600080611376610794565b915091508415806113845750815b801561138f57508381115b80156113a257508215806113a257508281115b6113be5760405162461bcd60e51b81526004016109739061587b565b5050505050611985565b60ff8116601814156114a7576000806000806000808c8c898181106113e957fe5b90506020028101906113fb9190615d50565b8101906114089190614bb4565b9550955095509550955095507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c0a47c938787878787876040518763ffffffff1660e01b815260040161146a96959493929190615526565b600060405180830381600087803b15801561148457600080fd5b505af1158015611498573d6000803e3d6000fd5b50505050505050505050611985565b60ff81166014141561152f576115258787848181106114c257fe5b90506020028101906114d49190615d50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c915086905081811061151757fe5b90506020020135878761401e565b9095509350611985565b60ff81166015141561159a5761152587878481811061154a57fe5b905060200281019061155c9190615d50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508992508891506141149050565b60ff8116601614156116725760008060008989868181106115b757fe5b90506020028101906115c99190615d50565b8101906115d69190614ce3565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc843385611619868e8e613ee8565b6040518563ffffffff1660e01b815260040161163894939291906156ab565b600060405180830381600087803b15801561165257600080fd5b505af1158015611666573d6000803e3d6000fd5b50505050505050611985565b60ff81166017141561170657600060608089898681811061168f57fe5b90506020028101906116a19190615d50565b8101906116ae91906150a1565b9250925092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630fca8843843385856040518563ffffffff1660e01b81526004016116389493929190615709565b60ff8116601e14156117e057606060006117888b8b8681811061172557fe5b905060200201358a8a8781811061173857fe5b905060200281019061174a9190615d50565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c92508b91506142029050565b915091508060ff16600114156117b357818060200190518101906117ac9190615320565b96506117d9565b8060ff16600214156117d957818060200190518101906117d39190615338565b90975095505b5050611985565b60ff8116600614156119085760008787848181106117fa57fe5b905060200281019061180c9190615d50565b810190611819919061524a565b6008549091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163da5139ca9116611890611860858b8b613ee8565b60408051808201909152600d546001600160801b038082168352600160801b9091041660208201529060016143b8565b60016040518463ffffffff1660e01b81526004016118b0939291906157ce565b60206040518083038186803b1580156118c857600080fd5b505afa1580156118dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119009190615320565b955050611985565b60ff81166007141561198557600087878481811061192257fe5b90506020028101906119349190615d50565b810190611941919061524a565b9050611981611951828888613ee8565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906000614451565b9550505b5060010161109c565b508051156119c0576119a4336000601054613d6d565b6119c05760405162461bcd60e51b8152600401610973906158b2565b50965096945050505050565b60006020819052908152604090205481565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611a645780601f10611a3957610100808354040283529160200191611a64565b820191906000526020600020905b815481529060010190602001808311611a4757829003601f168201915b505050505081565b6000611a76610794565b915050611a81612b5c565b6000806000611a8e614a29565b5060408051808201909152600d546001600160801b038082168352600160801b909104166020820152611abf614a29565b600754604051634ffe34db60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692634ffe34db92611b12929190911690600401615512565b604080518083038186803b158015611b2957600080fd5b505afa158015611b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6191906152de565b905060005b8c811015611d885760008e8e83818110611b7c57fe5b9050602002016020810190611b919190614b7c565b9050611b9e818a8a613d6d565b611d7f576001600160a01b0381166000908152600f6020526040812054808f8f86818110611bc857fe5b9050602002013511611bec578e8e85818110611be057fe5b90506020020135611bee565b805b9150611bfa81836144ca565b6001600160a01b0384166000908152600f60205260408120919091559050611c238683836143b8565b90506000611c5e69152d02c7e14af6800000611c4c8d611c46866201b5806144ed565b906144ed565b81611c5357fe5b889190046000614451565b6001600160a01b0385166000908152600e6020526040902054909150611c8490826144ca565b6001600160a01b038086166000908152600e60205260409020919091558d1615611cae578c611cb0565b8d5b6001600160a01b0316846001600160a01b03167f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c40283604051611cf2919061557a565b60405180910390a36001600160a01b03808516908e1615611d13578d611d15565b335b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8486604051611d4f929190615cf2565b60405180910390a3611d618a82613a5c565b9950611d6d8983613a5c565b9850611d798884613a5c565b97505050505b50600101611b66565b5083611da65760405162461bcd60e51b815260040161097390615c6a565b611dc3611db285614524565b83516001600160801b031690614551565b6001600160801b03168252611dee611dda84614524565b60208401516001600160801b031690614551565b6001600160801b03908116602084018190528351600d80546001600160801b03191691841691909117909216600160801b909102179055600b54611e3290866144ca565b600b55600854604051636d289ce560e11b81526000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92611e8d92169089906001906004016157ce565b60206040518083038186803b158015611ea557600080fd5b505afa158015611eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611edd9190615320565b90508761237257604051634656bfdf60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638cad7fbe90611f30908c90600401615512565b60206040518083038186803b158015611f4857600080fd5b505afa158015611f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f809190614f71565b611f9c5760405162461bcd60e51b815260040161097390615b2b565b600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92611ff592919091169030908e908c906004016156ab565b600060405180830381600087803b15801561200f57600080fd5b505af1158015612023573d6000803e3d6000fd5b50506007546008546040516371a1ff0960e11b81526001600160a01b03808f16955063e343fe129450612063938116921690309087908d906004016156d5565b6040805180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190615338565b5050600c54600854604051633de222bb60e21b8152600092612177926001600160801b03909116916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f7888aec926121219291909116903090600401615691565b60206040518083038186803b15801561213957600080fd5b505afa15801561214d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121719190615320565b906144ca565b9050600061218582846144ca565b90506000620186a0612199836127106144ed565b816121a057fe5b0490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f18d03cc600860009054906101000a90046001600160a01b0316307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561224257600080fd5b505afa158015612256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227a9190614b98565b856040518563ffffffff1660e01b815260040161229a94939291906156ab565b600060405180830381600087803b1580156122b457600080fd5b505af11580156122c8573d6000803e3d6000fd5b505050506122fc6122ea6122e583866144ca90919063ffffffff16565b614524565b600c546001600160801b031690614580565b600c80546001600160801b0319166001600160801b0392909216919091179055306001600160a01b038d167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e3861235285856144ca565b6000604051612362929190615cf2565b60405180910390a3505050612566565b6007546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163f18d03cc919081169030908d16156123ba578c6123bc565b8d5b8a6040518563ffffffff1660e01b81526004016123dc94939291906156ab565b600060405180830381600087803b1580156123f657600080fd5b505af115801561240a573d6000803e3d6000fd5b505050506001600160a01b038916156124ae576007546008546040516371a1ff0960e11b81526001600160a01b03808d169363e343fe129361245a93918316921690339087908d906004016156d5565b6040805180830381600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab9190615338565b50505b600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc926125079291909116903390309087906004016156ab565b600060405180830381600087803b15801561252157600080fd5b505af1158015612535573d6000803e3d6000fd5b505050506125456122ea82614524565b600c80546001600160801b0319166001600160801b03929092169190911790555b5050505050505050505050505050565b6009546001600160a01b031681565b60026020526000908152604090205481565b600d546001600160801b0380821691600160801b90041682565b6001600160a01b0383166000908152600e60205260409020546125d49082613a5c565b6001600160a01b0384166000908152600e6020526040902055600b546125fa8183613a5c565b600b55600754612615906001600160a01b03168383866145af565b836001600160a01b03168361262a573361264c565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f9ed03113de523cebfe5e49d5f8e12894b1c0d42ce805990461726444c90eab8784604051612684919061557a565b60405180910390a350505050565b61269a612b5c565b6126a48282613f10565b6126b2336000601054613d6d565b6126ce5760405162461bcd60e51b8152600401610973906158b2565b5050565b60066020526000908152604090205460ff1681565b6003546001600160a01b031681565b60075460609061270e906001600160a01b03166146b6565b600854612723906001600160a01b03166146b6565b60095460405163634ce26b60e11b81526001600160a01b039091169063c699c4d69061275490600a90600401615607565b60006040518083038186803b15801561276c57600080fd5b505afa158015612780573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127a891908101906152ac565b604051602001610935939291906154a5565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081156128785733600090815260208190526040902054828110156128165760405162461bcd60e51b815260040161097390615c03565b336001600160a01b03851614612876576001600160a01b03841661284c5760405162461bcd60e51b81526004016109739061592a565b3360009081526020819052604080822085840390556001600160a01b038616825290208054840190555b505b826001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a92919061557a565b6011546001600160401b0380821691600160401b810490911690600160801b90046001600160801b031683565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0387166129325760405162461bcd60e51b815260040161097390615bcc565b8342106129515760405162461bcd60e51b815260040161097390615b03565b6001600160a01b03871660008181526002602090815260409182902080546001818101909255925190926129cf926129b4927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928e928e928e92918e9101615583565b604051602081830303815290604052805190602001206146fd565b858585604051600081526020016040526040516129ef94939291906155d6565b6020604051602081039080840390855afa158015612a11573d6000803e3d6000fd5b505050602060405103516001600160a01b031614612a415760405162461bcd60e51b815260040161097390615ca1565b6001600160a01b038088166000818152600160209081526040808320948b168084529490915290819020889055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590612a9c90899061557a565b60405180910390a350505050505050565b6007546001600160a01b031681565b600160209081526000928352604080842090915290825290205481565b6004546001600160a01b031681565b6003546001600160a01b03163314612b125760405162461bcd60e51b815260040161097390615b62565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fcf1d3f17e521c635e0d20b8acba94ba170afc041d0546d46dafa09d3c9c19eb390600090a250565b612b64614a40565b50604080516060810182526011546001600160401b038082168352600160401b82041660208301819052600160801b9091046001600160801b03169282019290925290420380612bb557505061311c565b6001600160401b0342166020830152612bcc614a29565b5060408051808201909152600d546001600160801b038082168352600160801b9091041660208201819052612cbe5782516001600160401b03166312e687c014612c56576312e687c08084526040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b91612c4d91600091829182906157f1565b60405180910390a15b5050805160118054602084015160409094015167ffffffffffffffff199091166001600160401b039384161767ffffffffffffffff60401b1916600160401b9390941692909202929092176001600160801b03908116600160801b919092160217905561311c565b600080612cc9614a29565b5060408051808201909152600c546001600160801b038082168352600160801b9091048116602083015286518551670de0b6b3a764000092612d1b928992611c469216906001600160401b03166144ed565b81612d2257fe5b049250612d42612d3184614524565b85516001600160801b031690614580565b6001600160801b03168085526008548251604051630acc462360e31b8152600093612e039390926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693635662311893612dad939216919088906004016157a2565b60206040518083038186803b158015612dc557600080fd5b505afa158015612dd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfd9190615320565b90613a5c565b90506000620186a0612e17866127106144ed565b81612e1e57fe5b04905081612e4284602001516001600160801b0316836144ed90919063ffffffff16565b81612e4957fe5b049350612e6c612e5885614524565b60408a01516001600160801b031690614580565b6001600160801b03166040890152612e9a612e8685614524565b60208501516001600160801b031690614580565b600c80546001600160801b03908116600160801b9382168402179091558751600d805460208b01516001600160801b031990911692841692831784169316909302919091179091556000908390612ef990670de0b6b3a76400006144ed565b81612f0057fe5b0490506709b6e64a8ec60000811015612fc25760006709b6e64a8ec60000612f34670de0b6b3a7640000611c4683866144ca565b81612f3b57fe5b0490506000612f69612f518b611c4685806144ed565b7054a2b63d65d79d094abb6688000000000090613a5c565b8b519091508190612f94906001600160401b03167054a2b63d65d79d094abb668800000000006144ed565b81612f9b57fe5b046001600160401b0316808c526304b9a1f01115612fbb576304b9a1f08b525b5050613073565b670b1a2bc2ec5000008111156130735760006702c68af0bb140000612ffb670de0b6b3a7640000611c4685670b1a2bc2ec5000006144ca565b8161300257fe5b0490506000613018612f518b611c4685806144ed565b8b519091506000907054a2b63d65d79d094abb6688000000000090613046906001600160401b0316846144ed565b8161304d57fe5b0490506449d482460081111561306557506449d48246005b6001600160401b03168b5250505b88516040517f33af5ce86e8438eff54589f85332916444457dfa8685493fbd579b809097026b916130a9918991899186906157f1565b60405180910390a1505086516011805460208a01516040909a015167ffffffffffffffff199091166001600160401b039384161767ffffffffffffffff60401b1916600160401b93909a1692909202989098176001600160801b03908116600160801b9190921602179096555050505050505b565b600c546001600160801b0380821691600160801b90041682565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b179052905160609160009183916001600160a01b0386169161317f91906153bf565b600060405180830381855afa9150503d80600081146131ba576040519150601f19603f3d011682016040523d82523d6000602084013e6131bf565b606091505b5091509150816131ea57604051806040016040528060038152602001623f3f3f60e81b8152506131f3565b6131f381614735565b925050505b919050565b60408051808201909152600d546001600160801b038082168352600160801b9091041660208201526000906132349083600161489a565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b0386166000908152600f90925260409091205490915061329290836144ca565b6001600160a01b038086166000908152600f6020526040808220939093556008549251636d289ce560e11b815290927f000000000000000000000000000000000000000000000000000000000000000083169263da5139ca92613300929091169086906001906004016157ce565b60206040518083038186803b15801561331857600080fd5b505afa15801561332c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133509190615320565b600c546008549192506001600160801b031690613378906001600160a01b03168383886145af565b61339461338483614524565b6001600160801b03831690614580565b600c80546001600160801b0319166001600160801b03929092169190911790556001600160a01b038616856133c957336133eb565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167fc8e512d8f188ca059984b5853d2bf653da902696b8512785b182b2c813789a6e8587604051613425929190615cf2565b60405180910390a350509392505050565b6000613440614a29565b50604080518082018252600c546001600160801b03808216808452600160801b90920481166020840152600854600d549451636d289ce560e11b8152939492936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca946134c99492169216906001906004016157a2565b60206040518083038186803b1580156134e157600080fd5b505afa1580156134f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135199190615320565b83516001600160801b0316019050801561355b578061354e84602001516001600160801b0316876144ed90919063ffffffff16565b8161355557fe5b0461355d565b845b93506103e861358261356e86614524565b60208601516001600160801b031690614580565b6001600160801b0316101561359d5760009350505050610b12565b6135a883868661490f565b8051600c80546020938401516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556001600160a01b03881660009081529081905260409020546136019085613a5c565b6001600160a01b0380891660009081526020819052604090209190915560085461362e91168684896145af565b866001600160a01b0316866136435733613665565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03167f30a8c4f9ab5af7e1309ca87c32377d1a83366c5990472dbf9d262450eae14e38878760405161369f929190615cf2565b60405180910390a35050509392505050565b60006136bb614a29565b50604080518082018252600c546001600160801b038082168352600160801b90910481166020830152600854600d549351636d289ce560e11b815292936000936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169463da5139ca94613742949216929116906001906004016157a2565b60206040518083038186803b15801561375a57600080fd5b505afa15801561376e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137929190615320565b825160208401516001600160801b03918216929092019250166137b585836144ed565b816137bc57fe5b3360009081526020819052604090205491900493506137db90856144ca565b336000908152602081905260409020556137f7611db284614524565b6001600160801b0316825261380e611dda85614524565b6001600160801b0316602083018190526103e8111561383f5760405162461bcd60e51b815260040161097390615844565b8151600c805460208501516001600160801b03908116600160801b029381166001600160801b031990921691909117169190911790556040516001600160a01b0386169033907f6e853a5fd6b51d773691f542ebac8513c9992a51380d4c342031056a64114228906138b49087908990615cf2565b60405180910390a3600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc9261391592919091169030908a9089906004016156ab565b600060405180830381600087803b15801561392f57600080fd5b505af1158015613943573d6000803e3d6000fd5b50505050505092915050565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b179052905160009182916060916001600160a01b0386169161399691906153bf565b600060405180830381855afa9150503d80600081146139d1576040519150601f19603f3d011682016040523d82523d6000602084013e6139d6565b606091505b50915091508180156139e9575080516020145b6139f45760126131f3565b808060200190518101906131f39190615377565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692188230604051602001613a3f939291906155b7565b604051602081830303815290604052805190602001209050919050565b81810181811015610a9e5760405162461bcd60e51b815260040161097390615a5e565b60008080620186a0613a928560326144ed565b81613a9957fe5b049050613ad9613aa98583613a5c565b60408051808201909152600d546001600160801b038082168352600160801b909104166020820152906001614950565b8151600d80546020948501516001600160801b03908116600160801b029381166001600160801b03199092169190911716919091179055336000908152600f909252604090912054909350613b2e9084613a5c565b336000818152600f6020526040908190209290925590516001600160a01b03871691907f3a5151e57d3bc9798e7853034ac52293d1a0e12a2b44725e75b03b21f86477a690613b8290889086908990615d00565b60405180910390a3600854604051636d289ce560e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263da5139ca92613be292919091169088906000906004016157ce565b60206040518083038186803b158015613bfa57600080fd5b505afa158015613c0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c329190615320565b9150613c3c614a29565b5060408051808201909152600c546001600160801b038082168352600160801b90910416602082018190526103e81115613c885760405162461bcd60e51b815260040161097390615844565b613ca5613c9484614524565b82516001600160801b031690614551565b6001600160801b03908116808352600c805460208501518416600160801b026001600160801b0319909116909217909216179055600854604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613d3292919091169030908b9089906004016156ab565b600060405180830381600087803b158015613d4c57600080fd5b505af1158015613d60573d6000803e3d6000fd5b5050505050509250929050565b6001600160a01b0383166000908152600f602052604081205480613d95576001915050610b12565b6001600160a01b0385166000908152600e602052604090205480613dbe57600092505050610b12565b613dc6614a29565b5060408051808201909152600d546001600160801b03808216808452600160801b909204166020830181905290613e04908790611c469087906144ed565b81613e0b57fe5b600754919004906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169163566231189116613e6b8a613e5657620124f8613e5b565b62012cc85b611c46886509184e72a0006144ed565b60006040518463ffffffff1660e01b8152600401613e8b939291906157ce565b60206040518083038186803b158015613ea357600080fd5b505afa158015613eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edb9190615320565b1015979650505050505050565b600080841215613f08576000198414613f015781613f03565b825b610ab9565b509192915050565b336000908152600e6020526040902054613f2a90826144ca565b336000908152600e6020526040902055600b54613f4790826144ca565b600b556040516001600160a01b0383169033907f8ad4d3ff00da092c7ad9a573ea4f5f6a3dffc6712dc06d3f78f49b862297c40290613f8790859061557a565b60405180910390a3600754604051633c6340f360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f18d03cc92613fe89291909116903090879087906004016156ab565b600060405180830381600087803b15801561400257600080fd5b505af1158015614016573d6000803e3d6000fd5b505050505050565b6000806000806000808980602001905181019061403b919061505a565b935093509350935061404e828989613ee8565b915061405b818989613ee8565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166302b9446c8a86338787876040518763ffffffff1660e01b81526004016140b29594939291906156d5565b60408051808303818588803b1580156140ca57600080fd5b505af11580156140de573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141039190615338565b955095505050505094509492505050565b60008060008060008088806020019051810190614131919061505a565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166397da6d30853386614176878e8e613ee8565b614181878f8f613ee8565b6040518663ffffffff1660e01b81526004016141a19594939291906156d5565b6040805180830381600087803b1580156141ba57600080fd5b505af11580156141ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f29190615338565b9550955050505050935093915050565b606060008060606000806000898060200190518101906142229190614c21565b94509450945094509450828015614237575081155b1561426557838960405160200161424f9291906153db565b60405160208183030381529060405293506142be565b821580156142705750815b1561428857838860405160200161424f9291906153db565b8280156142925750815b156142be578389896040516020016142ac939291906153fd565b60405160208183030381529060405293505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161415801561430957506001600160a01b0385163014155b6143255760405162461bcd60e51b815260040161097390615a95565b60006060866001600160a01b03168d8760405161434291906153bf565b60006040518083038185875af1925050503d806000811461437f576040519150601f19603f3d011682016040523d82523d6000602084013e614384565b606091505b5091509150816143a65760405162461bcd60e51b8152600401610973906159f0565b9c919b50909950505050505050505050565b600083602001516001600160801b0316600014156143d7575081610b12565b602084015184516001600160801b03918216916143f6918691166144ed565b816143fd57fe5b04905081801561444157508284600001516001600160801b031661443786602001516001600160801b0316846144ed90919063ffffffff16565b8161443e57fe5b04105b15610b1257610ab9816001613a5c565b82516000906001600160801b031661446a575081610b12565b835160208501516001600160801b0391821691614489918691166144ed565b8161449057fe5b04905081801561444157508284602001516001600160801b031661443786600001516001600160801b0316846144ed90919063ffffffff16565b80820382811115610a9e5760405162461bcd60e51b815260040161097390615815565b60008115806145085750508082028282828161450557fe5b04145b610a9e5760405162461bcd60e51b815260040161097390615c33565b60006001600160801b0382111561454d5760405162461bcd60e51b815260040161097390615a27565b5090565b8082036001600160801b038084169082161115610a9e5760405162461bcd60e51b815260040161097390615815565b8181016001600160801b038083169082161015610a9e5760405162461bcd60e51b815260040161097390615a5e565b801561462b57614607827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f7888aec87306040518363ffffffff1660e01b8152600401612121929190615691565b8311156146265760405162461bcd60e51b81526004016109739061595a565b6146b0565b604051633c6340f360e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f18d03cc9061467d9087903390309089906004016156ab565b600060405180830381600087803b15801561469757600080fd5b505af11580156146ab573d6000803e3d6000fd5b505050505b50505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b179052905160609160009183916001600160a01b0386169161317f91906153bf565b600060405180604001604052806002815260200161190160f01b815250614722610cb0565b83604051602001613a3f939291906153fd565b6060604082511061475b578180602001905181019061475491906152ac565b90506131f8565b81516020141561487a5760005b60208160ff161080156147975750828160ff168151811061478557fe5b01602001516001600160f81b03191615155b156147a457600101614768565b60608160ff166001600160401b03811180156147bf57600080fd5b506040519080825280601f01601f1916602001820160405280156147ea576020820181803683370190505b509050600091505b60208260ff161080156148215750838260ff168151811061480f57fe5b01602001516001600160f81b03191615155b1561487157838260ff168151811061483557fe5b602001015160f81c60f81b818360ff168151811061484f57fe5b60200101906001600160f81b031916908160001a9053506001909101906147f2565b91506131f89050565b506040805180820190915260038152623f3f3f60e81b60208201526131f8565b6148a2614a29565b60006148af8585856143b8565b90506148ce6148bd82614524565b86516001600160801b031690614551565b6001600160801b031685526148f96148e585614524565b60208701516001600160801b031690614551565b6001600160801b03166020860152939492505050565b614917614a29565b614923612d3184614524565b6001600160801b0316845261493a61356e83614524565b6001600160801b03166020850152509192915050565b614958614a29565b6000614965858585614451565b905061498461497385614524565b86516001600160801b031690614580565b6001600160801b031685526148f961499b82614524565b60208701516001600160801b031690614580565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149f057805160ff1916838001178555614a1d565b82800160010185558215614a1d579182015b82811115614a1d578251825591602001919060010190614a02565b5061454d929150614a60565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b5b8082111561454d5760008155600101614a61565b8035610a9e81615e34565b60008083601f840112614a91578182fd5b5081356001600160401b03811115614aa7578182fd5b6020830191508360208083028501011115610f1657600080fd5b600082601f830112614ad1578081fd5b8135614ae4614adf82615dba565b615d94565b818152915060208083019084810181840286018201871015614b0557600080fd5b60005b84811015614b2457813584529282019290820190600101614b08565b505050505092915050565b600082601f830112614b3f578081fd5b8151614b4d614adf82615dd9565b9150808252836020828501011115614b6457600080fd5b614b75816020840160208601615e08565b5092915050565b600060208284031215614b8d578081fd5b8135610b1281615e34565b600060208284031215614ba9578081fd5b8151610b1281615e34565b60008060008060008060c08789031215614bcc578182fd5b8635614bd781615e34565b95506020870135614be781615e34565b94506040870135614bf781615e4c565b93506060870135614c0781615e6f565b9598949750929560808101359460a0909101359350915050565b600080600080600060a08688031215614c38578283fd5b8551614c4381615e34565b60208701519095506001600160401b03811115614c5e578384fd5b614c6a88828901614b2f565b9450506040860151614c7b81615e4c565b6060870151909350614c8c81615e4c565b6080870151909250614c9d81615e6f565b809150509295509295909350565b60008060408385031215614cbd578182fd5b8235614cc881615e34565b91506020830135614cd881615e34565b809150509250929050565b600080600060608486031215614cf7578081fd5b8335614d0281615e34565b92506020840135614d1281615e34565b929592945050506040919091013590565b600080600080600080600060e0888a031215614d3d578485fd5b8735614d4881615e34565b96506020880135614d5881615e34565b955060408801359450606088013593506080880135614d7681615e6f565b9699959850939692959460a0840135945060c09093013592915050565b600080600060608486031215614da7578081fd5b8335614db281615e34565b92506020840135614dc281615e4c565b91506040840135614dd281615e4c565b809150509250925092565b600080600060608486031215614df1578081fd5b8335614dfc81615e34565b92506020840135614d1281615e4c565b60008060408385031215614e1e578182fd5b8235614e2981615e34565b946020939093013593505050565b600080600080600080600060a0888a031215614e51578081fd5b87356001600160401b0380821115614e67578283fd5b614e738b838c01614a80565b909950975060208a0135915080821115614e8b578283fd5b50614e988a828b01614a80565b9096509450506040880135614eac81615e34565b92506060880135614ebc81615e34565b91506080880135614ecc81615e4c565b8091505092959891949750929550565b60008060008060008060608789031215614ef4578384fd5b86356001600160401b0380821115614f0a578586fd5b614f168a838b01614a80565b90985096506020890135915080821115614f2e578586fd5b614f3a8a838b01614a80565b90965094506040890135915080821115614f52578384fd5b50614f5f89828a01614a80565b979a9699509497509295939492505050565b600060208284031215614f82578081fd5b8151610b1281615e4c565b60008060408385031215614f9f578182fd5b8251614faa81615e4c565b6020939093015192949293505050565b600080600060608486031215614fce578081fd5b8335614fd981615e4c565b95602085013595506040909401359392505050565b60008060208385031215615000578182fd5b82356001600160401b0380821115615016578384fd5b818501915085601f830112615029578384fd5b813581811115615037578485fd5b866020828501011115615048578485fd5b60209290920196919550909350505050565b6000806000806080858703121561506f578182fd5b845161507a81615e34565b602086015190945061508b81615e34565b6040860151606090960151949790965092505050565b6000806000606084860312156150b5578081fd5b83356150c081615e34565b92506020848101356001600160401b03808211156150dc578384fd5b818701915087601f8301126150ef578384fd5b81356150fd614adf82615dba565b81815284810190848601868402860187018c1015615119578788fd5b8795505b838610156151435761512f8c82614a75565b83526001959095019491860191860161511d565b5096505050604087013592508083111561515b578384fd5b505061516986828701614ac1565b9150509250925092565b60008060008060808587031215615188578182fd5b843561519381615e34565b935060208501356151a381615e34565b925060408501356151b381615e34565b915060608501356001600160401b038111156151cd578182fd5b8501601f810187136151dd578182fd5b80356151eb614adf82615dd9565b8181528860208385010111156151ff578384fd5b81602084016020830137908101602001929092525092959194509250565b6000806040838503121561522f578182fd5b823561523a81615e34565b91506020830135614cd881615e4c565b60006020828403121561525b578081fd5b5035919050565b60008060408385031215615274578182fd5b823591506020830135614cd881615e34565b60008060006060848603121561529a578081fd5b833592506020840135614dc281615e34565b6000602082840312156152bd578081fd5b81516001600160401b038111156152d2578182fd5b610ab984828501614b2f565b6000604082840312156152ef578081fd5b6152f96040615d94565b825161530481615e5a565b8152602083015161531481615e5a565b60208201529392505050565b600060208284031215615331578081fd5b5051919050565b6000806040838503121561534a578182fd5b505080516020909101519092909150565b60006020828403121561536c578081fd5b8135610b1281615e6f565b600060208284031215615388578081fd5b8151610b1281615e6f565b600081518084526153ab816020860160208601615e08565b601f01601f19169290920160200192915050565b600082516153d1818460208701615e08565b9190910192915050565b600083516153ed818460208801615e08565b9190910191825250602001919050565b6000845161540f818460208901615e08565b91909101928352506020820152604001919050565b600075023b7b632102b32b4b71026b2b234bab6902934b9b5960551b82528451615455816016850160208901615e08565b602f60f81b6016918401918201528451615476816017840160208901615e08565b602d60f81b601792909101918201528351615498816018840160208801615e08565b0160180195945050505050565b6000616b6d60f01b825284516154c2816002850160208901615e08565b602f60f81b60029184019182015284516154e3816003840160208901615e08565b602d60f81b600392909101918201528351615505816004840160208801615e08565b0160040195945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152949095166020850152911515604084015260ff166060830152608082015260a081019190915260c00190565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b92835260208301919091526001600160a01b0316604082015260600190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252610b126020830184615393565b6000602080830181845282855460018082166000811461562e576001811461564c57615684565b60028304607f16855260ff1983166040890152606088019350615684565b6002830480865261565c8a615dfc565b885b8281101561567a5781548b82016040015290840190880161565e565b8a01604001955050505b5091979650505050505050565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b60006080820160018060a01b0380881684526020818816818601526080604086015282875180855260a0870191508289019450855b8181101561575c57855185168352948301949183019160010161573e565b50508581036060870152865180825290820193509150808601845b8381101561579357815185529382019390820190600101615777565b50929998505050505050505050565b6001600160a01b039390931683526001600160801b039190911660208301521515604082015260600190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b93845260208401929092526001600160401b03166040830152606082015260800190565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b60208082526017908201527f476f6c645665696e3a2062656c6f77206d696e696d756d000000000000000000604082015260600190565b60208082526019908201527f476f6c645665696e506169723a2072617465206e6f74206f6b00000000000000604082015260600190565b6020808252601c908201527f476f6c645665696e506169723a207573657220696e736f6c76656e7400000000604082015260600190565b60208082526021908201527f476f6c645665696e506169723a20616c726561647920696e697469616c697a656040820152601960fa1b606082015260800190565b60208082526016908201527545524332303a206e6f207a65726f206164647265737360501b604082015260600190565b6020808252601b908201527f476f6c645665696e506169723a20536b696d20746f6f206d7563680000000000604082015260600190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526016908201527523b7b6322b32b4b72830b4b91d103130b2103830b4b960511b604082015260600190565b60208082526019908201527f476f6c645665696e506169723a2063616c6c206661696c656400000000000000604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526018908201527f476f6c645665696e506169723a2063616e27742063616c6c0000000000000000604082015260600190565b60208082526018908201527f45524332303a20616c6c6f77616e636520746f6f206c6f770000000000000000604082015260600190565b6020808252600e908201526d115490cc8c0e88115e1c1a5c995960921b604082015260600190565b6020808252601d908201527f476f6c645665696e506169723a20496e76616c69642073776170706572000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b60208082526018908201527f45524332303a204f776e65722063616e6e6f7420626520300000000000000000604082015260600190565b60208082526016908201527545524332303a2062616c616e636520746f6f206c6f7760501b604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6020808252601d908201527f476f6c645665696e506169723a20616c6c2061726520736f6c76656e74000000604082015260600190565b60208082526018908201527f45524332303a20496e76616c6964205369676e61747572650000000000000000604082015260600190565b6001600160801b0392831681529116602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b6001600160401b0393841681529190921660208201526001600160801b03909116604082015260600190565b60ff91909116815260200190565b6000808335601e19843603018112615d66578283fd5b8301803591506001600160401b03821115615d7f578283fd5b602001915036819003821315610f1657600080fd5b6040518181016001600160401b0381118282101715615db257600080fd5b604052919050565b60006001600160401b03821115615dcf578081fd5b5060209081020190565b60006001600160401b03821115615dee578081fd5b50601f01601f191660200190565b60009081526020902090565b60005b83811015615e23578181015183820152602001615e0b565b838111156146b05750506000910152565b6001600160a01b0381168114615e4957600080fd5b50565b8015158114615e4957600080fd5b6001600160801b0381168114615e4957600080fd5b60ff81168114615e4957600080fdfea2646970667358221220c416ed3d1fa7bc0b344c118da25f3a080125d64fb614f8bb210bf87a7be313e464736f6c634300060c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}