{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockTimeNonfungiblePositionManager",
  "sourceName": "contracts/elixir-periphery/test/MockTimeNonfungiblePositionManager.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WETH9",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_tokenDescriptor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_elixirRewarder",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ClaimReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Collect",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "DecreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "IncreaseLiquidity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WETH9",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "claimReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint128",
              "name": "amount0Max",
              "type": "uint128"
            },
            {
              "internalType": "uint128",
              "name": "amount1Max",
              "type": "uint128"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.CollectParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "name": "createAndInitializePoolIfNecessary",
      "outputs": [
        {
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "decreaseLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount0Owed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1Owed",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "elixirMintCallback",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "forgoReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "increaseLiquidity",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "token0",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "token1",
              "type": "address"
            },
            {
              "internalType": "uint24",
              "name": "fee",
              "type": "uint24"
            },
            {
              "internalType": "int24",
              "name": "tickLower",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "tickUpper",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "amount0Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Desired",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount0Min",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount1Min",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "recipient",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct INonfungiblePositionManager.MintParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "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": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "positionReward",
      "outputs": [
        {
          "internalType": "uint192",
          "name": "rewardPerLiquidityInsideLastX64",
          "type": "uint192"
        },
        {
          "internalType": "uint32",
          "name": "rewardLastUpdated",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "rewardLastCollected",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "rewardOwed",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "nonce",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside0LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthInside1LastX128",
          "type": "uint256"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "tokensOwed1",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "refundETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "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": "selfPermit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowed",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "selfPermitAllowedIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "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": "selfPermitIfNecessary",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "setTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "sweepToken",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountMinimum",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "unwrapWETH9",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_elixirRewarder_",
          "type": "address"
        }
      ],
      "name": "updateRewardManager",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenDescriptor_",
          "type": "address"
        }
      ],
      "name": "updateTokenDescriptor",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x610100604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b50604051620063d9380380620063d9833981016040819052620000579162000303565b8383838383836040518060400160405280601481526020017f456c6978697220506f736974696f6e73204e465400000000000000000000000081525060405180604001604052806008815260200167495849522d504f5360c01b815250604051806040016040528060018152602001603160f81b8152508282620000e86301ffc9a760e01b620001b560201b60201c565b8151620000fd9060069060208501906200023a565b508051620001139060079060208401906200023a565b50620001266380ac58cd60e01b620001b5565b62000138635b5e139f60e01b620001b5565b6200014a63780e9d6360e01b620001b5565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c052911b1660e052600e80546001600160a01b039384166001600160a01b031991821617909155600f8054929093169116179055506200035f945050505050565b6001600160e01b0319808216141562000215576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002725760008555620002bd565b82601f106200028d57805160ff1916838001178555620002bd565b82800160010185558215620002bd579182015b82811115620002bd578251825591602001919060010190620002a0565b50620002cb929150620002cf565b5090565b5b80821115620002cb5760008155600101620002d0565b80516001600160a01b0381168114620002fe57600080fd5b919050565b6000806000806080858703121562000319578384fd5b6200032485620002e6565b93506200033460208601620002e6565b92506200034460408601620002e6565b91506200035460608601620002e6565b905092959194509250565b60805160a05160c05160601c60e05160601c615ff8620003e16000398061021b52806116d352806117be5280611846528061377552806137bb528061382f525080610a475280610d685280610e2f528061104f5280612a215280612c895280612e9d5280613251528061395b5250806114e25250806114c15250615ff86000f3fe60806040526004361061020b5760003560e01c80634f6ccce7116101145780634f6ccce7146104e35780636352211e146105035780636c0360eb1461052357806370a082311461053857806375e39cec146105585780637ac2ff7b14610588578063883164561461059b57806395d89b41146105be57806397f12a83146105d357806399fbab88146105e6578063a22cb4651461061e578063a4a78f0c1461063e578063ac9650d814610651578063b88d4fde14610671578063c2e3140a14610691578063c45a0155146106a4578063c87b56dd146106b9578063df2ab5bb146106d9578063e70eb392146106ec578063e985e9c5146106ff578063f3995c671461071f578063fc6f7865146107325761027b565b806301ffc9a714610280578063050eb2eb146102b657806306fdde03146102c9578063081812fc146102eb578063095ea7b3146103185780630c49ccbe1461033857806312210e8a1461035957806313ead562146103615780631507a8f41461037457806318160ddd14610394578063219f5d17146103b657806323b872dd146103d857806329048e7b146103f85780632f745c591461040b57806330adf81f1461042b5780633644e515146104405780633beb26c41461045557806342842e0e1461047557806342966c68146104955780634659a494146104a857806349404b7c146104bb5780634aa4a4fc146104ce5761027b565b3661027b57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610279576040805162461bcd60e51b81526020600482015260096024820152684e6f7420574554483960b81b604482015290519081900360640190fd5b005b600080fd5b34801561028c57600080fd5b506102a061029b366004615436565b610745565b6040516102ad9190615a21565b60405180910390f35b6102796102c4366004615125565b610768565b3480156102d557600080fd5b506102de610792565b6040516102ad9190615a88565b3480156102f757600080fd5b5061030b610306366004615799565b610828565b6040516102ad91906158c2565b34801561032457600080fd5b50610279610333366004615301565b61087b565b61034b610346366004615565565b610951565b6040516102ad929190615bfe565b610279610d3c565b61030b61036f366004615195565b610d46565b34801561038057600080fd5b5061027961038f3660046157f8565b61103a565b3480156103a057600080fd5b506103a96110b8565b6040516102ad9190615a2c565b6103c96103c4366004615576565b6110c9565b6040516102ad93929190615b8c565b3480156103e457600080fd5b506102796103f33660046151ee565b6113a4565b610279610406366004615799565b6113fb565b34801561041757600080fd5b506103a9610426366004615301565b61144d565b34801561043757600080fd5b506103a9611478565b34801561044c57600080fd5b506103a961149c565b34801561046157600080fd5b50610279610470366004615799565b61155a565b34801561048157600080fd5b506102796104903660046151ee565b61155f565b6102796104a3366004615799565b61157a565b6102796104b636600461536d565b611635565b6102796104c93660046157b1565b6116cf565b3480156104da57600080fd5b5061030b611844565b3480156104ef57600080fd5b506103a96104fe366004615799565b611868565b34801561050f57600080fd5b5061030b61051e366004615799565b61187e565b34801561052f57600080fd5b506102de6118a6565b34801561054457600080fd5b506103a9610553366004615125565b6118ab565b34801561056457600080fd5b50610578610573366004615799565b611913565b6040516102ad9493929190615bad565b61027961059636600461536d565b611a60565b6105ae6105a9366004615631565b611df0565b6040516102ad9493929190615bda565b3480156105ca57600080fd5b506102de612379565b6102796105e1366004615125565b6123da565b3480156105f257600080fd5b50610606610601366004615799565b612404565b6040516102ad9c9b9a99989796959493929190615c0c565b34801561062a57600080fd5b506102796106393660046152d4565b612659565b61027961064c36600461536d565b61275a565b61066461065f3660046153c8565b6127f3565b6040516102ad91906159c1565b34801561067d57600080fd5b5061027961068c36600461522e565b612932565b61027961069f36600461536d565b612990565b3480156106b057600080fd5b5061030b612a1f565b3480156106c557600080fd5b506102de6106d4366004615799565b612a43565b6102796106e736600461532c565b612add565b6102796106fa3660046157b1565b612bb5565b34801561070b57600080fd5b506102a061071a36600461515d565b612d01565b61027961072d36600461536d565b612d2f565b61034b61074036600461554e565b612da1565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b61077061324f565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60068054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b5050505050905090565b6000610833826132fd565b6108585760405162461bcd60e51b815260040161084f90615ac1565b60405180910390fd5b506000908152600c6020526040902054600160601b90046001600160a01b031690565b60006108868261187e565b9050806001600160a01b0316836001600160a01b031614156108d95760405162461bcd60e51b8152600401808060200182810382526021815260200180615f716021913960400191505060405180910390fd5b806001600160a01b03166108eb61330a565b6001600160a01b0316148061090757506109078161071a61330a565b6109425760405162461bcd60e51b8152600401808060200182810382526038815260200180615e7b6038913960400191505060405180910390fd5b61094c838361330e565b505050565b600080823561095f81613384565b836080013561096d816133ad565b600061097f6040870160208801615643565b6001600160801b03161161099257600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b0316916109cd918901908901615643565b6001600160801b0316816001600160801b031610156109eb57600080fd5b6001828101546001600160501b03166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610a6c7f0000000000000000000000000000000000000000000000000000000000000000836133f8565b9050610a7884826134d7565b60018401546001600160a01b0382169063a34123a790600160501b8104600290810b91600160681b9004900b610ab460408e0160208f01615643565b6040518463ffffffff1660e01b8152600401610ad293929190615a62565b6040805180830381600087803b158015610aeb57600080fd5b505af1158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2391906157d5565b909850965060408901358810801590610b40575088606001358710155b610b5c5760405162461bcd60e51b815260040161084f90615af4565b6001840154600090610b85903090600160501b8104600290810b91600160681b9004900b61363c565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610bb69190615a2c565b60a06040518083038186803b158015610bce57600080fd5b505afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c06919061568d565b50509250925050610c2b87600201548303876001600160801b0316600160801b613691565b6004880180546001600160801b03198116928e016001600160801b039182160181169290921790556003880154610c6c91908303908816600160801b613691565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610cb260408d0160208e01615643565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610d159190615643565b8d8d604051610d2693929190615b8c565b60405180910390a2505050505050505050915091565b610d44613740565b565b6000836001600160a01b0316856001600160a01b031610610d6657600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610df157600080fd5b505afa158015610e05573d6000803e3d6000fd5b505050506040513d6020811015610e1b57600080fd5b505190506001600160a01b038116610f51577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b505050506040513d6020811015610ee457600080fd5b50516040805163f637731d60e01b81526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b50505050611032565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610f8c57600080fd5b505afa158015610fa0573d6000803e3d6000fd5b505050506040513d60e0811015610fb657600080fd5b505190506001600160a01b03811661103057816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050505b505b949350505050565b600061104882840184615587565b90506110787f00000000000000000000000000000000000000000000000000000000000000008260000151613750565b50841561109357805151602082015161109391903388613773565b83156110b1576110b181600001516020015182602001513387613773565b5050505050565b60006110c46002613903565b905090565b60008060008360a001356110dc816133ad565b84356000908152600c602090815260408083206001808201546001600160501b0381168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a0152925116828701523082850152600160501b8304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906111be9061390e565b6001870154939a50919850965091506000906111f1903090600160501b8104600290810b91600160681b9004900b61363c565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112229190615a2c565b60a06040518083038186803b15801561123a57600080fd5b505afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611272919061568d565b505092509250506112ae866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b613691565b6004870180546001600160801b0380821690930183166001600160801b0319909116179055600387015460018801546112f59291840391600160801b918290041690613691565b6004870180546001600160801b03600160801b80830482169094018116909302921691909117905561132786856134d7565b60028601829055600386018190556001860180546001600160801b03600160801b80830482168e0182160291161790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f9061138e908d908d908d90615b8c565b60405180910390a2505050505050509193909250565b6113b56113af61330a565b82613b49565b6113f05760405162461bcd60e51b8152600401808060200182810382526031815260200180615f926031913960400191505060405180910390fd5b61094c838383613be5565b8061140581613384565b6000828152600c6020526040902061141b613d1f565b60058201805463ffffffff92909216600160e01b026001600160e01b0390921691909117905560006006909101555050565b6001600160a01b038216600090815260016020526040812061146f9083613d3b565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611509613d47565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b601055565b61094c83838360405180602001604052806000815250612932565b8061158481613384565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156115bf575060048101546001600160801b0316155b80156115dd57506004810154600160801b90046001600160801b0316155b80156115eb57506006810154155b6115f457600080fd5b6000838152600c6020526040812081815560018101829055600281018290556003810182905560048101829055600581018290556006015561094c83613d4b565b604080516323f2ebc360e21b815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156116af57600080fd5b505af11580156116c3573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d602081101561176857600080fd5b50519050828110156117b6576040805162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b604482015290519081900360640190fd5b801561094c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561182257600080fd5b505af1158015611836573d6000803e3d6000fd5b5050505061094c8282613e06565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611876600284613ef5565b509392505050565b600061147282604051806060016040528060298152602001615edd6029913960029190613f13565b606090565b60006001600160a01b0382166118f25760405162461bcd60e51b815260040180806020018281038252602a815260200180615eb3602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061147290613903565b6000818152600c6020908152604080832081516101c08101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004830154808216610100870152919091041661012084015260058101546001600160c01b03811661014085015263ffffffff600160c01b82048116610160860152600160e01b90910416610180840152600601546101a083015282918291829190611a385760405162461bcd60e51b815260040161084f90615b22565b806101400151816101600151826101800151836101a001519450945094509450509193509193565b83611a6a816133ad565b6000611a7461149c565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8989611aa081613f20565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018b90528151808403909101815260c08301825280519084012061190160f01b60e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611b288861187e565b9050806001600160a01b0316896001600160a01b03161415611b91576040805162461bcd60e51b815260206004820152601f60248201527f4552433732315065726d69743a20617070726f76616c20746f206f776e657200604482015290519081900360640190fd5b611b9a81613f55565b15611d02576040805160208082018890528183018790526001600160f81b031960f88a901b1660608301528251604181840301815260618301808552630b135d3f60e11b90526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611c33578181015183820152602001611c1b565b50505050905090810190601f168015611c605780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611c7e57600080fd5b505afa158015611c92573d6000803e3d6000fd5b505050506040513d6020811015611ca857600080fd5b50516001600160e01b031916630b135d3f60e11b14611cfd576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b611ddb565b600060018388888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d5e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611d945750816001600160a01b0316816001600160a01b0316145b611dd9576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b505b611de5898961330e565b505050505050505050565b600080600080846101400135611e05816133ad565b604080516101408101909152600090611ed19080611e2660208b018b615125565b6001600160a01b03168152602001896020016020810190611e479190615125565b6001600160a01b03168152602001611e6560608b0160408c0161577f565b62ffffff168152306020820152604001611e8560808b0160608c0161545e565b60020b8152602001611e9d60a08b0160808c0161545e565b60020b81526020018960a0013581526020018960c0013581526020018960e00135815260200189610100013581525061390e565b92975090955093509050611f1e611ef061014089016101208a01615125565b600d80546001600160b01b0319811660016001600160b01b0392831690810190921617909155975087613f5b565b6000611f4930611f3460808b0160608c0161545e565b611f4460a08c0160808d0161545e565b61363c565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401611f7a9190615a2c565b60a06040518083038186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fca919061568d565b5050925092505060006120438560405180606001604052808e6000016020810190611ff59190615125565b6001600160a01b031681526020018e60200160208101906120169190615125565b6001600160a01b031681526020018e6040016020810190612037919061577f565b62ffffff169052614076565b9050604051806101c0016040528060006001600160601b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c6060016020810190612093919061545e565b60020b81526020016120ab60a08e0160808f0161545e565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815260200160006001600160c01b03168152602001600063ffffffff168152602001600063ffffffff1681526020016000815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816001600160601b0302191690836001600160601b03160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055506101408201518160050160006101000a8154816001600160c01b0302191690836001600160c01b031602179055506101608201518160050160186101000a81548163ffffffff021916908363ffffffff16021790555061018082015181600501601c6101000a81548163ffffffff021916908363ffffffff1602179055506101a08201518160060155905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161236493929190615b8c565b60405180910390a25050505050509193509193565b60078054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561081e5780601f106107f35761010080835404028352916020019161081e565b6123e261324f565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600c6020908152604080832081516101c08101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004830154808216610100870152919091041661012084015260058101546001600160c01b03811661014085015263ffffffff600160c01b82048116610160860152600160e01b90910416610180840152600601546101a083015282918291829182918291829182918291829182918291906125395760405162461bcd60e51b815260040161084f90615b22565b6000600b600083604001516001600160501b03166001600160501b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b61266161330a565b6001600160a01b0316826001600160a01b031614156126c3576040805162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015290519081900360640190fd5b80600560006126d061330a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561271461330a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60408051636eb1769f60e11b81523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156127ab57600080fd5b505afa1580156127bf573d6000803e3d6000fd5b505050506040513d60208110156127d557600080fd5b505110156127eb576127eb868686868686611635565b505050505050565b6060816001600160401b038111801561280b57600080fd5b5060405190808252806020026020018201604052801561283f57816020015b606081526020019060019003908161282a5790505b50905060005b8281101561292b576000803086868581811061285d57fe5b905060200281019061286f9190615ca6565b60405161287d9291906158b2565b600060405180830381855af49150503d80600081146128b8576040519150601f19603f3d011682016040523d82523d6000602084013e6128bd565b606091505b509150915081612909576044815110156128d657600080fd5b600481019050808060200190518101906128f091906154e5565b60405162461bcd60e51b815260040161084f9190615a88565b8084848151811061291657fe5b60209081029190910101525050600101612845565b5092915050565b61294361293d61330a565b83613b49565b61297e5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f926031913960400191505060405180910390fd5b61298a84848484614155565b50505050565b60408051636eb1769f60e11b8152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156129df57600080fd5b505afa1580156129f3573d6000803e3d6000fd5b505050506040513d6020811015612a0957600080fd5b505110156127eb576127eb868686868686612d2f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612a4e826132fd565b612a5757600080fd5b600e5460405163e9dc637560e01b81526001600160a01b039091169063e9dc637590612a899030908690600401615a35565b60006040518083038186803b158015612aa157600080fd5b505afa158015612ab5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261147291908101906154e5565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612b2c57600080fd5b505afa158015612b40573d6000803e3d6000fd5b505050506040513d6020811015612b5657600080fd5b5051905082811015612ba4576040805162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015290519081900360640190fd5b801561298a5761298a8483836141a7565b81612bbf81613384565b6001600160a01b038216612bd257600080fd5b6000838152600c6020526040812060068101549091612bef613d1f565b6000600685018190556005850180546001600160e01b0316600160e01b63ffffffff851602179055600f546001808701546001600160501b03168352600b6020908152604093849020845160608101865281546001600160a01b039081168252919093015480821692840192909252600160a01b90910462ffffff169382019390935292935016906332d5eeaf90879085908a90612cae907f0000000000000000000000000000000000000000000000000000000000000000906133f8565b600589015460405160e087901b6001600160e01b0319168152612ce79594939291600160c01b900463ffffffff16908990600401615982565b600060405180830381600087803b1580156116af57600080fd5b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6040805163d505accf60e01b8152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156116af57600080fd5b6000808235612daf81613384565b6000612dc16060860160408701615643565b6001600160801b03161180612dee57506000612de36080860160608701615643565b6001600160801b0316115b612df757600080fd5b600080612e0a6040870160208801615125565b6001600160a01b031614612e2d57612e286040860160208701615125565b612e2f565b305b85356000908152600c602090815260408083206001808201546001600160501b03168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612ec27f0000000000000000000000000000000000000000000000000000000000000000836133f8565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130b857600185015460405163a34123a760e01b81526001600160a01b0385169163a34123a791612f3991600160501b8104600290810b92600160681b909204900b90600090600401615a62565b6040805180830381600087803b158015612f5257600080fd5b505af1158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a91906157d5565b5050600185015460009081906001600160a01b0386169063514ea4bf90612fc8903090600160501b8104600290810b91600160681b9004900b61363c565b6040518263ffffffff1660e01b8152600401612fe49190615a2c565b60a06040518083038186803b158015612ffc57600080fd5b505afa158015613010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613034919061568d565b50509250925050613070876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613691565b840193506130a9876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613691565b60028801929092556003870155015b6000806001600160801b0384166130d560608e0160408f01615643565b6001600160801b0316116130f8576130f360608d0160408e01615643565b6130fa565b835b836001600160801b03168d60600160208101906131179190615643565b6001600160801b03161161313a5761313560808e0160608f01615643565b61313c565b835b60018901546040516309e3d67b60e31b81529294509092506001600160a01b03871691634f1eb3d89161318f918c91600160501b8104600290810b92600160681b909204900b908890889060040161591b565b6040805180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e0919061565f565b6004890180546001600160801b03196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610d26908b9086908690615958565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132a857600080fd5b505afa1580156132bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e09190615141565b6001600160a01b0316336001600160a01b031614610d4457600080fd5b60006114726002836142ee565b3390565b6000818152600c6020526040902080546001600160601b0316600160601b6001600160a01b03851690810291909117909155819061334b8261187e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61338e3382613b49565b6133aa5760405162461bcd60e51b815260040161084f90615a9b565b50565b804211156133aa576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b600081602001516001600160a01b031682600001516001600160a01b03161061342057600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6001600160601b03191660a183015260b58201939093527f41a723f9e6457830b1b7a44df4435fab88581d073226894b33131815dd674c2260d5808301919091528251808303909101815260f5909101909152805191012090565b60018201546040516351c403f960e11b81526000916001600160a01b0384169163a38807f29161352091600160501b8204600290810b92600160681b9004900b90600401615a4e565b60806040518083038186803b15801561353857600080fd5b505afa15801561354c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613570919061547a565b60058701549094506001600160c01b0380861691161092506135959150505750613638565b6005830154600160c01b900463ffffffff16156135ef57600583015460018401546135e3916001600160c01b0390811684031690600160801b90046001600160801b0316600160401b613691565b60068401805490910190555b6005830180546001600160c01b0319166001600160c01b038316179055613614613d1f565b8360050160186101000a81548163ffffffff021916908363ffffffff160217905550505b5050565b604080516001600160601b0319606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b60008080600019858709868602925082811090839003039050806136c757600084116136bc57600080fd5b50829004905061368a565b8084116136d357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b4715610d4457610d443347613e06565b600061375c83836133f8565b9050336001600160a01b0382161461147257600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156137b45750804710155b156138d6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561381457600080fd5b505af1158015613828573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156138a457600080fd5b505af11580156138b8573d6000803e3d6000fd5b505050506040513d60208110156138ce57600080fd5b5061298a9050565b6001600160a01b0383163014156138f7576138f28483836141a7565b61298a565b61298a848484846142fa565b60006114728261444a565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506139807f0000000000000000000000000000000000000000000000000000000000000000826133f8565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156139bd57600080fd5b505afa1580156139d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f591906156ee565b50505050505090506000613a0c886080015161444e565b90506000613a1d8960a0015161444e565b9050613a348383838c60c001518d60e00151614775565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b0316815250604051602001613a869190615b4c565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613ab59594939291906158d6565b6040805180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0691906157d5565b61010088015191955093508410801590613b2557508561012001518310155b613b415760405162461bcd60e51b815260040161084f90615af4565b509193509193565b6000613b54826132fd565b613b8f5760405162461bcd60e51b815260040180806020018281038252602c815260200180615e4f602c913960400191505060405180910390fd5b6000613b9a8361187e565b9050806001600160a01b0316846001600160a01b03161480613bd55750836001600160a01b0316613bca84610828565b6001600160a01b0316145b8061103257506110328185612d01565b826001600160a01b0316613bf88261187e565b6001600160a01b031614613c3d5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f286029913960400191505060405180910390fd5b6001600160a01b038216613c825760405162461bcd60e51b8152600401808060200182810382526024815260200180615e056024913960400191505060405180910390fd5b613c8d83838361094c565b613c9860008261330e565b6001600160a01b0383166000908152600160205260409020613cba9082614839565b506001600160a01b0382166000908152600160205260409020613cdd9082614845565b50613cea60028284614851565b5080826001600160a01b0316846001600160a01b0316600080516020615f5183398151915260405160405180910390a4505050565b600063ffffffff4211613d3257426110c4565b5063ffffffff90565b600061146f8383614867565b4690565b6000613d568261187e565b9050613d648160008461094c565b613d6f60008361330e565b6000828152600860205260409020546002600019610100600184161502019091160415613dad576000828152600860205260408120613dad9161509d565b6001600160a01b0381166000908152600160205260409020613dcf9083614839565b50613ddb6002836148cb565b5060405182906000906001600160a01b03841690600080516020615f51833981519152908390a45050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e525780518252601f199092019160209182019101613e33565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613eb4576040519150601f19603f3d011682016040523d82523d6000602084013e613eb9565b606091505b505090508061094c576040805162461bcd60e51b815260206004820152600360248201526253544560e81b604482015290519081900360640190fd5b6000808080613f0486866148d7565b909450925050505b9250929050565b6000611032848484614952565b6000908152600c6020526040902080546001600160601b0319811660016001600160601b039283169081019092161790915590565b3b151590565b6001600160a01b038216613fb6576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613fbf816132fd565b15614010576040805162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604482015290519081900360640190fd5b61401c6000838361094c565b6001600160a01b038216600090815260016020526040902061403e9082614845565b5061404b60028284614851565b5060405181906001600160a01b03841690600090600080516020615f51833981519152908290a45050565b6001600160a01b0382166000908152600a60205260409020546001600160501b0316806114725750600d805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b038085166000908152600a6020908152604080832080546001600160501b03191686179055848352600b825291829020865181549085166001600160a01b031991821617825591870151950180549287015162ffffff16600160a01b0262ffffff60a01b19969094169290911691909117939093161790915592915050565b614160848484613be5565b61416c84848484614a1c565b61298a5760405162461bcd60e51b8152600401808060200182810382526032815260200180615dd36032913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106142235780518252601f199092019160209182019101614204565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614285576040519150601f19603f3d011682016040523d82523d6000602084013e61428a565b606091505b50915091508180156142b85750805115806142b857508080602001905160208110156142b557600080fd5b50515b6110b1576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b600061146f8383614b84565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b6020831061437e5780518252601f19909201916020918201910161435f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146143e0576040519150601f19603f3d011682016040523d82523d6000602084013e6143e5565b606091505b5091509150818015614413575080511580614413575080806020019051602081101561441057600080fd5b50515b6127eb576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b5490565b60008060008360020b12614465578260020b61446d565b8260020b6000035b9050620d89e88111156144ab576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166144bf57600160801b6144d1565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156144fb576ffff97272373d413259a46990580e213a0260801c5b600482161561451a576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614539576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615614558576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615614577576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615614596576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156145b5576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156145d5576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156145f5576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614615576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614635576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614655576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614675576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614695576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156146b5576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156146d6576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156146f6576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614715576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614732576b048a170391f7dc42444e8fa20260801c5b60008460020b131561474d57806000198161474957fe5b0490505b600160201b810615614760576001614763565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b03161115614795579293925b846001600160a01b0316866001600160a01b0316116147c0576147b9858585614b9c565b9050614830565b836001600160a01b0316866001600160a01b031610156148225760006147e7878686614b9c565b905060006147f6878986614bff565b9050806001600160801b0316826001600160801b0316106148175780614819565b815b92505050614830565b61482d858584614bff565b90505b95945050505050565b600061146f8383614c3c565b600061146f8383614d02565b600061103284846001600160a01b038516614d4c565b815460009082106148a95760405162461bcd60e51b8152600401808060200182810382526022815260200180615db16022913960400191505060405180910390fd5b8260000182815481106148b857fe5b9060005260206000200154905092915050565b600061146f8383614de3565b81546000908190831061491b5760405162461bcd60e51b8152600401808060200182810382526022815260200180615f066022913960400191505060405180910390fd5b600084600001848154811061492c57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816149ed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156149b257818101518382015260200161499a565b50505050905090810190601f1680156149df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110614a0057fe5b9060005260206000209060020201600101549150509392505050565b6000614a30846001600160a01b0316613f55565b614a3c57506001611032565b6000614b4a630a85bd0160e11b614a5161330a565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ab8578181015183820152602001614aa0565b50505050905090810190601f168015614ae55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001615dd3603291396001600160a01b0388169190614eb7565b90506000818060200190516020811015614b6357600080fd5b50516001600160e01b031916630a85bd0160e11b1492505050949350505050565b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614bbc579192915b6000614bdf856001600160a01b0316856001600160a01b0316600160601b613691565b9050614830614bfa84838888036001600160a01b0316613691565b614ec6565b6000826001600160a01b0316846001600160a01b03161115614c1f579192915b611032614bfa83600160601b8787036001600160a01b0316613691565b60008181526001830160205260408120548015614cf85783546000198083019190810190600090879083908110614c6f57fe5b9060005260206000200154905080876000018481548110614c8c57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614cbc57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611472565b6000915050611472565b6000614d0e8383614b84565b614d4457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611472565b506000611472565b600082815260018401602052604081205480614db157505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561368a565b82856000016001830381548110614dc457fe5b906000526020600020906002020160010181905550600091505061368a565b60008181526001830160205260408120548015614cf85783546000198083019190810190600090879083908110614e1657fe5b9060005260206000209060020201905080876000018481548110614e3657fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614e7557fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506114729350505050565b60606110328484600085614edc565b806001600160801b038116811461076357600080fd5b606082471015614f1d5760405162461bcd60e51b8152600401808060200182810382526026815260200180615e296026913960400191505060405180910390fd5b614f2685613f55565b614f77576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614fb55780518252601f199092019160209182019101614f96565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615017576040519150601f19603f3d011682016040523d82523d6000602084013e61501c565b606091505b509150915061502c828286615037565b979650505050505050565b6060831561504657508161368a565b8251156150565782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156149b257818101518382015260200161499a565b50805460018160011615610100020316600290046000825580601f106150c357506133aa565b601f0160209004906000526020600020908101906133aa91905b808211156150f157600081556001016150dd565b5090565b803561076381615d5a565b805161ffff8116811461076357600080fd5b803562ffffff8116811461076357600080fd5b600060208284031215615136578081fd5b813561368a81615d5a565b600060208284031215615152578081fd5b815161368a81615d5a565b6000806040838503121561516f578081fd5b823561517a81615d5a565b9150602083013561518a81615d5a565b809150509250929050565b600080600080608085870312156151aa578182fd5b84356151b581615d5a565b935060208501356151c581615d5a565b92506151d360408601615112565b915060608501356151e381615d5a565b939692955090935050565b600080600060608486031215615202578081fd5b833561520d81615d5a565b9250602084013561521d81615d5a565b929592945050506040919091013590565b60008060008060808587031215615243578182fd5b843561524e81615d5a565b9350602085013561525e81615d5a565b92506040850135915060608501356001600160401b0381111561527f578182fd5b8501601f8101871361528f578182fd5b80356152a261529d82615d0d565b615cea565b8181528860208385010111156152b6578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156152e6578182fd5b82356152f181615d5a565b9150602083013561518a81615d6f565b60008060408385031215615313578182fd5b823561531e81615d5a565b946020939093013593505050565b600080600060608486031215615340578081fd5b833561534b81615d5a565b925060208401359150604084013561536281615d5a565b809150509250925092565b60008060008060008060c08789031215615385578384fd5b863561539081615d5a565b9550602087013594506040870135935060608701356153ae81615da1565b9598949750929560808101359460a0909101359350915050565b600080602083850312156153da578182fd5b82356001600160401b03808211156153f0578384fd5b818501915085601f830112615403578384fd5b813581811115615411578485fd5b8660208083028501011115615424578485fd5b60209290920196919550909350505050565b600060208284031215615447578081fd5b81356001600160e01b03198116811461368a578182fd5b60006020828403121561546f578081fd5b813561368a81615d7d565b6000806000806080858703121561548f578182fd5b84518060060b811461549f578283fd5b60208601519094506154b081615d5a565b604086015190935063ffffffff811681146154c9578283fd5b60608601519092506001600160c01b03811681146151e3578182fd5b6000602082840312156154f6578081fd5b81516001600160401b0381111561550b578182fd5b8201601f8101841361551b578182fd5b805161552961529d82615d0d565b81815285602083850101111561553d578384fd5b614830826020830160208601615d2e565b60006080828403121561555f578081fd5b50919050565b600060a0828403121561555f578081fd5b600060c0828403121561555f578081fd5b60008183036080811215615599578182fd5b604051604081016001600160401b0382821081831117156155b657fe5b8160405260608412156155c7578485fd5b60a08301935081841081851117156155db57fe5b5082604052843592506155ed83615d5a565b9182526020840135916155ff83615d5a565b82606083015261561160408601615112565b60808301528152615624606085016150f5565b6020820152949350505050565b6000610160828403121561555f578081fd5b600060208284031215615654578081fd5b813561368a81615d8c565b60008060408385031215615671578182fd5b825161567c81615d8c565b602084015190925061518a81615d8c565b600080600080600060a086880312156156a4578283fd5b85516156af81615d8c565b80955050602086015193506040860151925060608601516156cf81615d8c565b60808701519092506156e081615d8c565b809150509295509295909350565b600080600080600080600060e0888a031215615708578485fd5b875161571381615d5a565b602089015190975061572481615d7d565b955061573260408901615100565b945061574060608901615100565b935061574e60808901615100565b925060a088015161575e81615da1565b60c089015190925061576f81615d6f565b8091505092959891949750929550565b600060208284031215615790578081fd5b61146f82615112565b6000602082840312156157aa578081fd5b5035919050565b600080604083850312156157c3578182fd5b82359150602083013561518a81615d5a565b600080604083850312156157e7578182fd5b505080516020909101519092909150565b6000806000806060858703121561580d578182fd5b843593506020850135925060408501356001600160401b0380821115615831578384fd5b818701915087601f830112615844578384fd5b813581811115615852578485fd5b886020828501011115615863578485fd5b95989497505060200194505050565b6000815180845261588a816020860160208601615d2e565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a06080820181905260009061502c90830184615872565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6001600160a01b039687168152602081019590955260408501939093529316606083015263ffffffff928316608083015290911660a082015260c00190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615a1457603f19888603018452615a02858351615872565b945092850192908501906001016159e6565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600292830b8152910b602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261146f6020830184615872565b6020808252600c908201526b139bdd08185c1c1c9bdd995960a21b604082015260600190565b60208082526019908201527822a9219b99189d103737b732bc34b9ba32b73a103a37b5b2b760391b604082015260600190565b602080825260149082015273507269636520736c69707061676520636865636b60601b604082015260600190565b60208082526010908201526f125b9d985b1a59081d1bdad95b88125160821b604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b6001600160c01b0394909416845263ffffffff928316602085015291166040830152606082015260800190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6001600160601b038d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615c5e60c083018961589e565b615c6b60e08301886158a5565b8561010083015284610120830152615c876101408301856158a5565b615c956101608301846158a5565b9d9c50505050505050505050505050565b6000808335601e19843603018112615cbc578283fd5b8301803591506001600160401b03821115615cd5578283fd5b602001915036819003821315613f0c57600080fd5b6040518181016001600160401b0381118282101715615d0557fe5b604052919050565b60006001600160401b03821115615d2057fe5b50601f01601f191660200190565b60005b83811015615d49578181015183820152602001615d31565b8381111561298a5750506000910152565b6001600160a01b03811681146133aa57600080fd5b80151581146133aa57600080fd5b8060020b81146133aa57600080fd5b6001600160801b03811681146133aa57600080fd5b60ff811681146133aa57600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220609504b7be8c39ea06a62c550504c1044f7991b7d98f4136b8d46336d03e2c4a64736f6c63430007060033",
  "deployedBytecode": "0x60806040526004361061020b5760003560e01c80634f6ccce7116101145780634f6ccce7146104e35780636352211e146105035780636c0360eb1461052357806370a082311461053857806375e39cec146105585780637ac2ff7b14610588578063883164561461059b57806395d89b41146105be57806397f12a83146105d357806399fbab88146105e6578063a22cb4651461061e578063a4a78f0c1461063e578063ac9650d814610651578063b88d4fde14610671578063c2e3140a14610691578063c45a0155146106a4578063c87b56dd146106b9578063df2ab5bb146106d9578063e70eb392146106ec578063e985e9c5146106ff578063f3995c671461071f578063fc6f7865146107325761027b565b806301ffc9a714610280578063050eb2eb146102b657806306fdde03146102c9578063081812fc146102eb578063095ea7b3146103185780630c49ccbe1461033857806312210e8a1461035957806313ead562146103615780631507a8f41461037457806318160ddd14610394578063219f5d17146103b657806323b872dd146103d857806329048e7b146103f85780632f745c591461040b57806330adf81f1461042b5780633644e515146104405780633beb26c41461045557806342842e0e1461047557806342966c68146104955780634659a494146104a857806349404b7c146104bb5780634aa4a4fc146104ce5761027b565b3661027b57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610279576040805162461bcd60e51b81526020600482015260096024820152684e6f7420574554483960b81b604482015290519081900360640190fd5b005b600080fd5b34801561028c57600080fd5b506102a061029b366004615436565b610745565b6040516102ad9190615a21565b60405180910390f35b6102796102c4366004615125565b610768565b3480156102d557600080fd5b506102de610792565b6040516102ad9190615a88565b3480156102f757600080fd5b5061030b610306366004615799565b610828565b6040516102ad91906158c2565b34801561032457600080fd5b50610279610333366004615301565b61087b565b61034b610346366004615565565b610951565b6040516102ad929190615bfe565b610279610d3c565b61030b61036f366004615195565b610d46565b34801561038057600080fd5b5061027961038f3660046157f8565b61103a565b3480156103a057600080fd5b506103a96110b8565b6040516102ad9190615a2c565b6103c96103c4366004615576565b6110c9565b6040516102ad93929190615b8c565b3480156103e457600080fd5b506102796103f33660046151ee565b6113a4565b610279610406366004615799565b6113fb565b34801561041757600080fd5b506103a9610426366004615301565b61144d565b34801561043757600080fd5b506103a9611478565b34801561044c57600080fd5b506103a961149c565b34801561046157600080fd5b50610279610470366004615799565b61155a565b34801561048157600080fd5b506102796104903660046151ee565b61155f565b6102796104a3366004615799565b61157a565b6102796104b636600461536d565b611635565b6102796104c93660046157b1565b6116cf565b3480156104da57600080fd5b5061030b611844565b3480156104ef57600080fd5b506103a96104fe366004615799565b611868565b34801561050f57600080fd5b5061030b61051e366004615799565b61187e565b34801561052f57600080fd5b506102de6118a6565b34801561054457600080fd5b506103a9610553366004615125565b6118ab565b34801561056457600080fd5b50610578610573366004615799565b611913565b6040516102ad9493929190615bad565b61027961059636600461536d565b611a60565b6105ae6105a9366004615631565b611df0565b6040516102ad9493929190615bda565b3480156105ca57600080fd5b506102de612379565b6102796105e1366004615125565b6123da565b3480156105f257600080fd5b50610606610601366004615799565b612404565b6040516102ad9c9b9a99989796959493929190615c0c565b34801561062a57600080fd5b506102796106393660046152d4565b612659565b61027961064c36600461536d565b61275a565b61066461065f3660046153c8565b6127f3565b6040516102ad91906159c1565b34801561067d57600080fd5b5061027961068c36600461522e565b612932565b61027961069f36600461536d565b612990565b3480156106b057600080fd5b5061030b612a1f565b3480156106c557600080fd5b506102de6106d4366004615799565b612a43565b6102796106e736600461532c565b612add565b6102796106fa3660046157b1565b612bb5565b34801561070b57600080fd5b506102a061071a36600461515d565b612d01565b61027961072d36600461536d565b612d2f565b61034b61074036600461554e565b612da1565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b61077061324f565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b60068054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b5050505050905090565b6000610833826132fd565b6108585760405162461bcd60e51b815260040161084f90615ac1565b60405180910390fd5b506000908152600c6020526040902054600160601b90046001600160a01b031690565b60006108868261187e565b9050806001600160a01b0316836001600160a01b031614156108d95760405162461bcd60e51b8152600401808060200182810382526021815260200180615f716021913960400191505060405180910390fd5b806001600160a01b03166108eb61330a565b6001600160a01b0316148061090757506109078161071a61330a565b6109425760405162461bcd60e51b8152600401808060200182810382526038815260200180615e7b6038913960400191505060405180910390fd5b61094c838361330e565b505050565b600080823561095f81613384565b836080013561096d816133ad565b600061097f6040870160208801615643565b6001600160801b03161161099257600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b0316916109cd918901908901615643565b6001600160801b0316816001600160801b031610156109eb57600080fd5b6001828101546001600160501b03166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610a6c7f0000000000000000000000000000000000000000000000000000000000000000836133f8565b9050610a7884826134d7565b60018401546001600160a01b0382169063a34123a790600160501b8104600290810b91600160681b9004900b610ab460408e0160208f01615643565b6040518463ffffffff1660e01b8152600401610ad293929190615a62565b6040805180830381600087803b158015610aeb57600080fd5b505af1158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2391906157d5565b909850965060408901358810801590610b40575088606001358710155b610b5c5760405162461bcd60e51b815260040161084f90615af4565b6001840154600090610b85903090600160501b8104600290810b91600160681b9004900b61363c565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610bb69190615a2c565b60a06040518083038186803b158015610bce57600080fd5b505afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c06919061568d565b50509250925050610c2b87600201548303876001600160801b0316600160801b613691565b6004880180546001600160801b03198116928e016001600160801b039182160181169290921790556003880154610c6c91908303908816600160801b613691565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610cb260408d0160208e01615643565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610d159190615643565b8d8d604051610d2693929190615b8c565b60405180910390a2505050505050505050915091565b610d44613740565b565b6000836001600160a01b0316856001600160a01b031610610d6657600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610df157600080fd5b505afa158015610e05573d6000803e3d6000fd5b505050506040513d6020811015610e1b57600080fd5b505190506001600160a01b038116610f51577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610eba57600080fd5b505af1158015610ece573d6000803e3d6000fd5b505050506040513d6020811015610ee457600080fd5b50516040805163f637731d60e01b81526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610f3457600080fd5b505af1158015610f48573d6000803e3d6000fd5b50505050611032565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610f8c57600080fd5b505afa158015610fa0573d6000803e3d6000fd5b505050506040513d60e0811015610fb657600080fd5b505190506001600160a01b03811661103057816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561101757600080fd5b505af115801561102b573d6000803e3d6000fd5b505050505b505b949350505050565b600061104882840184615587565b90506110787f00000000000000000000000000000000000000000000000000000000000000008260000151613750565b50841561109357805151602082015161109391903388613773565b83156110b1576110b181600001516020015182602001513387613773565b5050505050565b60006110c46002613903565b905090565b60008060008360a001356110dc816133ad565b84356000908152600c602090815260408083206001808201546001600160501b0381168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a0152925116828701523082850152600160501b8304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906111be9061390e565b6001870154939a50919850965091506000906111f1903090600160501b8104600290810b91600160681b9004900b61363c565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016112229190615a2c565b60a06040518083038186803b15801561123a57600080fd5b505afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611272919061568d565b505092509250506112ae866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b613691565b6004870180546001600160801b0380821690930183166001600160801b0319909116179055600387015460018801546112f59291840391600160801b918290041690613691565b6004870180546001600160801b03600160801b80830482169094018116909302921691909117905561132786856134d7565b60028601829055600386018190556001860180546001600160801b03600160801b80830482168e0182160291161790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f9061138e908d908d908d90615b8c565b60405180910390a2505050505050509193909250565b6113b56113af61330a565b82613b49565b6113f05760405162461bcd60e51b8152600401808060200182810382526031815260200180615f926031913960400191505060405180910390fd5b61094c838383613be5565b8061140581613384565b6000828152600c6020526040902061141b613d1f565b60058201805463ffffffff92909216600160e01b026001600160e01b0390921691909117905560006006909101555050565b6001600160a01b038216600090815260016020526040812061146f9083613d3b565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611509613d47565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b601055565b61094c83838360405180602001604052806000815250612932565b8061158481613384565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156115bf575060048101546001600160801b0316155b80156115dd57506004810154600160801b90046001600160801b0316155b80156115eb57506006810154155b6115f457600080fd5b6000838152600c6020526040812081815560018101829055600281018290556003810182905560048101829055600581018290556006015561094c83613d4b565b604080516323f2ebc360e21b815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156116af57600080fd5b505af11580156116c3573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d602081101561176857600080fd5b50519050828110156117b6576040805162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b604482015290519081900360640190fd5b801561094c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561182257600080fd5b505af1158015611836573d6000803e3d6000fd5b5050505061094c8282613e06565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080611876600284613ef5565b509392505050565b600061147282604051806060016040528060298152602001615edd6029913960029190613f13565b606090565b60006001600160a01b0382166118f25760405162461bcd60e51b815260040180806020018281038252602a815260200180615eb3602a913960400191505060405180910390fd5b6001600160a01b038216600090815260016020526040902061147290613903565b6000818152600c6020908152604080832081516101c08101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004830154808216610100870152919091041661012084015260058101546001600160c01b03811661014085015263ffffffff600160c01b82048116610160860152600160e01b90910416610180840152600601546101a083015282918291829190611a385760405162461bcd60e51b815260040161084f90615b22565b806101400151816101600151826101800151836101a001519450945094509450509193509193565b83611a6a816133ad565b6000611a7461149c565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8989611aa081613f20565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018b90528151808403909101815260c08301825280519084012061190160f01b60e084015260e283019490945261010280830194909452805180830390940184526101229091019052815191012090506000611b288861187e565b9050806001600160a01b0316896001600160a01b03161415611b91576040805162461bcd60e51b815260206004820152601f60248201527f4552433732315065726d69743a20617070726f76616c20746f206f776e657200604482015290519081900360640190fd5b611b9a81613f55565b15611d02576040805160208082018890528183018790526001600160f81b031960f88a901b1660608301528251604181840301815260618301808552630b135d3f60e11b90526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611c33578181015183820152602001611c1b565b50505050905090810190601f168015611c605780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611c7e57600080fd5b505afa158015611c92573d6000803e3d6000fd5b505050506040513d6020811015611ca857600080fd5b50516001600160e01b031916630b135d3f60e11b14611cfd576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b611ddb565b600060018388888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d5e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611d945750816001600160a01b0316816001600160a01b0316145b611dd9576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b505b611de5898961330e565b505050505050505050565b600080600080846101400135611e05816133ad565b604080516101408101909152600090611ed19080611e2660208b018b615125565b6001600160a01b03168152602001896020016020810190611e479190615125565b6001600160a01b03168152602001611e6560608b0160408c0161577f565b62ffffff168152306020820152604001611e8560808b0160608c0161545e565b60020b8152602001611e9d60a08b0160808c0161545e565b60020b81526020018960a0013581526020018960c0013581526020018960e00135815260200189610100013581525061390e565b92975090955093509050611f1e611ef061014089016101208a01615125565b600d80546001600160b01b0319811660016001600160b01b0392831690810190921617909155975087613f5b565b6000611f4930611f3460808b0160608c0161545e565b611f4460a08c0160808d0161545e565b61363c565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401611f7a9190615a2c565b60a06040518083038186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fca919061568d565b5050925092505060006120438560405180606001604052808e6000016020810190611ff59190615125565b6001600160a01b031681526020018e60200160208101906120169190615125565b6001600160a01b031681526020018e6040016020810190612037919061577f565b62ffffff169052614076565b9050604051806101c0016040528060006001600160601b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c6060016020810190612093919061545e565b60020b81526020016120ab60a08e0160808f0161545e565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815260200160006001600160c01b03168152602001600063ffffffff168152602001600063ffffffff1681526020016000815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816001600160601b0302191690836001600160601b03160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b031602179055506101408201518160050160006101000a8154816001600160c01b0302191690836001600160c01b031602179055506101608201518160050160186101000a81548163ffffffff021916908363ffffffff16021790555061018082015181600501601c6101000a81548163ffffffff021916908363ffffffff1602179055506101a08201518160060155905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a60405161236493929190615b8c565b60405180910390a25050505050509193509193565b60078054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561081e5780601f106107f35761010080835404028352916020019161081e565b6123e261324f565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600c6020908152604080832081516101c08101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004830154808216610100870152919091041661012084015260058101546001600160c01b03811661014085015263ffffffff600160c01b82048116610160860152600160e01b90910416610180840152600601546101a083015282918291829182918291829182918291829182918291906125395760405162461bcd60e51b815260040161084f90615b22565b6000600b600083604001516001600160501b03166001600160501b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b61266161330a565b6001600160a01b0316826001600160a01b031614156126c3576040805162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015290519081900360640190fd5b80600560006126d061330a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561271461330a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60408051636eb1769f60e11b81523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156127ab57600080fd5b505afa1580156127bf573d6000803e3d6000fd5b505050506040513d60208110156127d557600080fd5b505110156127eb576127eb868686868686611635565b505050505050565b6060816001600160401b038111801561280b57600080fd5b5060405190808252806020026020018201604052801561283f57816020015b606081526020019060019003908161282a5790505b50905060005b8281101561292b576000803086868581811061285d57fe5b905060200281019061286f9190615ca6565b60405161287d9291906158b2565b600060405180830381855af49150503d80600081146128b8576040519150601f19603f3d011682016040523d82523d6000602084013e6128bd565b606091505b509150915081612909576044815110156128d657600080fd5b600481019050808060200190518101906128f091906154e5565b60405162461bcd60e51b815260040161084f9190615a88565b8084848151811061291657fe5b60209081029190910101525050600101612845565b5092915050565b61294361293d61330a565b83613b49565b61297e5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f926031913960400191505060405180910390fd5b61298a84848484614155565b50505050565b60408051636eb1769f60e11b8152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156129df57600080fd5b505afa1580156129f3573d6000803e3d6000fd5b505050506040513d6020811015612a0957600080fd5b505110156127eb576127eb868686868686612d2f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060612a4e826132fd565b612a5757600080fd5b600e5460405163e9dc637560e01b81526001600160a01b039091169063e9dc637590612a899030908690600401615a35565b60006040518083038186803b158015612aa157600080fd5b505afa158015612ab5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261147291908101906154e5565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612b2c57600080fd5b505afa158015612b40573d6000803e3d6000fd5b505050506040513d6020811015612b5657600080fd5b5051905082811015612ba4576040805162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015290519081900360640190fd5b801561298a5761298a8483836141a7565b81612bbf81613384565b6001600160a01b038216612bd257600080fd5b6000838152600c6020526040812060068101549091612bef613d1f565b6000600685018190556005850180546001600160e01b0316600160e01b63ffffffff851602179055600f546001808701546001600160501b03168352600b6020908152604093849020845160608101865281546001600160a01b039081168252919093015480821692840192909252600160a01b90910462ffffff169382019390935292935016906332d5eeaf90879085908a90612cae907f0000000000000000000000000000000000000000000000000000000000000000906133f8565b600589015460405160e087901b6001600160e01b0319168152612ce79594939291600160c01b900463ffffffff16908990600401615982565b600060405180830381600087803b1580156116af57600080fd5b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6040805163d505accf60e01b8152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156116af57600080fd5b6000808235612daf81613384565b6000612dc16060860160408701615643565b6001600160801b03161180612dee57506000612de36080860160608701615643565b6001600160801b0316115b612df757600080fd5b600080612e0a6040870160208801615125565b6001600160a01b031614612e2d57612e286040860160208701615125565b612e2f565b305b85356000908152600c602090815260408083206001808201546001600160501b03168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612ec27f0000000000000000000000000000000000000000000000000000000000000000836133f8565b600484015460018501549192506001600160801b0380821692600160801b92839004821692900416156130b857600185015460405163a34123a760e01b81526001600160a01b0385169163a34123a791612f3991600160501b8104600290810b92600160681b909204900b90600090600401615a62565b6040805180830381600087803b158015612f5257600080fd5b505af1158015612f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8a91906157d5565b5050600185015460009081906001600160a01b0386169063514ea4bf90612fc8903090600160501b8104600290810b91600160681b9004900b61363c565b6040518263ffffffff1660e01b8152600401612fe49190615a2c565b60a06040518083038186803b158015612ffc57600080fd5b505afa158015613010573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613034919061568d565b50509250925050613070876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613691565b840193506130a9876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613691565b60028801929092556003870155015b6000806001600160801b0384166130d560608e0160408f01615643565b6001600160801b0316116130f8576130f360608d0160408e01615643565b6130fa565b835b836001600160801b03168d60600160208101906131179190615643565b6001600160801b03161161313a5761313560808e0160608f01615643565b61313c565b835b60018901546040516309e3d67b60e31b81529294509092506001600160a01b03871691634f1eb3d89161318f918c91600160501b8104600290810b92600160681b909204900b908890889060040161591b565b6040805180830381600087803b1580156131a857600080fd5b505af11580156131bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e0919061565f565b6004890180546001600160801b03196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610d26908b9086908690615958565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132a857600080fd5b505afa1580156132bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e09190615141565b6001600160a01b0316336001600160a01b031614610d4457600080fd5b60006114726002836142ee565b3390565b6000818152600c6020526040902080546001600160601b0316600160601b6001600160a01b03851690810291909117909155819061334b8261187e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61338e3382613b49565b6133aa5760405162461bcd60e51b815260040161084f90615a9b565b50565b804211156133aa576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b600081602001516001600160a01b031682600001516001600160a01b03161061342057600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6001600160601b03191660a183015260b58201939093527f41a723f9e6457830b1b7a44df4435fab88581d073226894b33131815dd674c2260d5808301919091528251808303909101815260f5909101909152805191012090565b60018201546040516351c403f960e11b81526000916001600160a01b0384169163a38807f29161352091600160501b8204600290810b92600160681b9004900b90600401615a4e565b60806040518083038186803b15801561353857600080fd5b505afa15801561354c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613570919061547a565b60058701549094506001600160c01b0380861691161092506135959150505750613638565b6005830154600160c01b900463ffffffff16156135ef57600583015460018401546135e3916001600160c01b0390811684031690600160801b90046001600160801b0316600160401b613691565b60068401805490910190555b6005830180546001600160c01b0319166001600160c01b038316179055613614613d1f565b8360050160186101000a81548163ffffffff021916908363ffffffff160217905550505b5050565b604080516001600160601b0319606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b60008080600019858709868602925082811090839003039050806136c757600084116136bc57600080fd5b50829004905061368a565b8084116136d357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b4715610d4457610d443347613e06565b600061375c83836133f8565b9050336001600160a01b0382161461147257600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480156137b45750804710155b156138d6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561381457600080fd5b505af1158015613828573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156138a457600080fd5b505af11580156138b8573d6000803e3d6000fd5b505050506040513d60208110156138ce57600080fd5b5061298a9050565b6001600160a01b0383163014156138f7576138f28483836141a7565b61298a565b61298a848484846142fa565b60006114728261444a565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff1681525090506139807f0000000000000000000000000000000000000000000000000000000000000000826133f8565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156139bd57600080fd5b505afa1580156139d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f591906156ee565b50505050505090506000613a0c886080015161444e565b90506000613a1d8960a0015161444e565b9050613a348383838c60c001518d60e00151614775565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b0316815250604051602001613a869190615b4c565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613ab59594939291906158d6565b6040805180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0691906157d5565b61010088015191955093508410801590613b2557508561012001518310155b613b415760405162461bcd60e51b815260040161084f90615af4565b509193509193565b6000613b54826132fd565b613b8f5760405162461bcd60e51b815260040180806020018281038252602c815260200180615e4f602c913960400191505060405180910390fd5b6000613b9a8361187e565b9050806001600160a01b0316846001600160a01b03161480613bd55750836001600160a01b0316613bca84610828565b6001600160a01b0316145b8061103257506110328185612d01565b826001600160a01b0316613bf88261187e565b6001600160a01b031614613c3d5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f286029913960400191505060405180910390fd5b6001600160a01b038216613c825760405162461bcd60e51b8152600401808060200182810382526024815260200180615e056024913960400191505060405180910390fd5b613c8d83838361094c565b613c9860008261330e565b6001600160a01b0383166000908152600160205260409020613cba9082614839565b506001600160a01b0382166000908152600160205260409020613cdd9082614845565b50613cea60028284614851565b5080826001600160a01b0316846001600160a01b0316600080516020615f5183398151915260405160405180910390a4505050565b600063ffffffff4211613d3257426110c4565b5063ffffffff90565b600061146f8383614867565b4690565b6000613d568261187e565b9050613d648160008461094c565b613d6f60008361330e565b6000828152600860205260409020546002600019610100600184161502019091160415613dad576000828152600860205260408120613dad9161509d565b6001600160a01b0381166000908152600160205260409020613dcf9083614839565b50613ddb6002836148cb565b5060405182906000906001600160a01b03841690600080516020615f51833981519152908390a45050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b60208310613e525780518252601f199092019160209182019101613e33565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613eb4576040519150601f19603f3d011682016040523d82523d6000602084013e613eb9565b606091505b505090508061094c576040805162461bcd60e51b815260206004820152600360248201526253544560e81b604482015290519081900360640190fd5b6000808080613f0486866148d7565b909450925050505b9250929050565b6000611032848484614952565b6000908152600c6020526040902080546001600160601b0319811660016001600160601b039283169081019092161790915590565b3b151590565b6001600160a01b038216613fb6576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b613fbf816132fd565b15614010576040805162461bcd60e51b815260206004820152601c60248201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604482015290519081900360640190fd5b61401c6000838361094c565b6001600160a01b038216600090815260016020526040902061403e9082614845565b5061404b60028284614851565b5060405181906001600160a01b03841690600090600080516020615f51833981519152908290a45050565b6001600160a01b0382166000908152600a60205260409020546001600160501b0316806114725750600d805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b038085166000908152600a6020908152604080832080546001600160501b03191686179055848352600b825291829020865181549085166001600160a01b031991821617825591870151950180549287015162ffffff16600160a01b0262ffffff60a01b19969094169290911691909117939093161790915592915050565b614160848484613be5565b61416c84848484614a1c565b61298a5760405162461bcd60e51b8152600401808060200182810382526032815260200180615dd36032913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b602083106142235780518252601f199092019160209182019101614204565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614285576040519150601f19603f3d011682016040523d82523d6000602084013e61428a565b606091505b50915091508180156142b85750805115806142b857508080602001905160208110156142b557600080fd5b50515b6110b1576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b600061146f8383614b84565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b6020831061437e5780518252601f19909201916020918201910161435f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146143e0576040519150601f19603f3d011682016040523d82523d6000602084013e6143e5565b606091505b5091509150818015614413575080511580614413575080806020019051602081101561441057600080fd5b50515b6127eb576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b5490565b60008060008360020b12614465578260020b61446d565b8260020b6000035b9050620d89e88111156144ab576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166144bf57600160801b6144d1565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156144fb576ffff97272373d413259a46990580e213a0260801c5b600482161561451a576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614539576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615614558576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615614577576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615614596576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156145b5576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156145d5576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156145f5576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614615576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614635576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614655576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614675576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614695576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156146b5576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156146d6576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156146f6576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614715576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614732576b048a170391f7dc42444e8fa20260801c5b60008460020b131561474d57806000198161474957fe5b0490505b600160201b810615614760576001614763565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b03161115614795579293925b846001600160a01b0316866001600160a01b0316116147c0576147b9858585614b9c565b9050614830565b836001600160a01b0316866001600160a01b031610156148225760006147e7878686614b9c565b905060006147f6878986614bff565b9050806001600160801b0316826001600160801b0316106148175780614819565b815b92505050614830565b61482d858584614bff565b90505b95945050505050565b600061146f8383614c3c565b600061146f8383614d02565b600061103284846001600160a01b038516614d4c565b815460009082106148a95760405162461bcd60e51b8152600401808060200182810382526022815260200180615db16022913960400191505060405180910390fd5b8260000182815481106148b857fe5b9060005260206000200154905092915050565b600061146f8383614de3565b81546000908190831061491b5760405162461bcd60e51b8152600401808060200182810382526022815260200180615f066022913960400191505060405180910390fd5b600084600001848154811061492c57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816149ed5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156149b257818101518382015260200161499a565b50505050905090810190601f1680156149df5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110614a0057fe5b9060005260206000209060020201600101549150509392505050565b6000614a30846001600160a01b0316613f55565b614a3c57506001611032565b6000614b4a630a85bd0160e11b614a5161330a565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ab8578181015183820152602001614aa0565b50505050905090810190601f168015614ae55780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050604051806060016040528060328152602001615dd3603291396001600160a01b0388169190614eb7565b90506000818060200190516020811015614b6357600080fd5b50516001600160e01b031916630a85bd0160e11b1492505050949350505050565b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b03161115614bbc579192915b6000614bdf856001600160a01b0316856001600160a01b0316600160601b613691565b9050614830614bfa84838888036001600160a01b0316613691565b614ec6565b6000826001600160a01b0316846001600160a01b03161115614c1f579192915b611032614bfa83600160601b8787036001600160a01b0316613691565b60008181526001830160205260408120548015614cf85783546000198083019190810190600090879083908110614c6f57fe5b9060005260206000200154905080876000018481548110614c8c57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614cbc57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611472565b6000915050611472565b6000614d0e8383614b84565b614d4457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611472565b506000611472565b600082815260018401602052604081205480614db157505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561368a565b82856000016001830381548110614dc457fe5b906000526020600020906002020160010181905550600091505061368a565b60008181526001830160205260408120548015614cf85783546000198083019190810190600090879083908110614e1657fe5b9060005260206000209060020201905080876000018481548110614e3657fe5b600091825260208083208454600290930201918255600193840154918401919091558354825289830190526040902090840190558654879080614e7557fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506114729350505050565b60606110328484600085614edc565b806001600160801b038116811461076357600080fd5b606082471015614f1d5760405162461bcd60e51b8152600401808060200182810382526026815260200180615e296026913960400191505060405180910390fd5b614f2685613f55565b614f77576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614fb55780518252601f199092019160209182019101614f96565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114615017576040519150601f19603f3d011682016040523d82523d6000602084013e61501c565b606091505b509150915061502c828286615037565b979650505050505050565b6060831561504657508161368a565b8251156150565782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156149b257818101518382015260200161499a565b50805460018160011615610100020316600290046000825580601f106150c357506133aa565b601f0160209004906000526020600020908101906133aa91905b808211156150f157600081556001016150dd565b5090565b803561076381615d5a565b805161ffff8116811461076357600080fd5b803562ffffff8116811461076357600080fd5b600060208284031215615136578081fd5b813561368a81615d5a565b600060208284031215615152578081fd5b815161368a81615d5a565b6000806040838503121561516f578081fd5b823561517a81615d5a565b9150602083013561518a81615d5a565b809150509250929050565b600080600080608085870312156151aa578182fd5b84356151b581615d5a565b935060208501356151c581615d5a565b92506151d360408601615112565b915060608501356151e381615d5a565b939692955090935050565b600080600060608486031215615202578081fd5b833561520d81615d5a565b9250602084013561521d81615d5a565b929592945050506040919091013590565b60008060008060808587031215615243578182fd5b843561524e81615d5a565b9350602085013561525e81615d5a565b92506040850135915060608501356001600160401b0381111561527f578182fd5b8501601f8101871361528f578182fd5b80356152a261529d82615d0d565b615cea565b8181528860208385010111156152b6578384fd5b81602084016020830137908101602001929092525092959194509250565b600080604083850312156152e6578182fd5b82356152f181615d5a565b9150602083013561518a81615d6f565b60008060408385031215615313578182fd5b823561531e81615d5a565b946020939093013593505050565b600080600060608486031215615340578081fd5b833561534b81615d5a565b925060208401359150604084013561536281615d5a565b809150509250925092565b60008060008060008060c08789031215615385578384fd5b863561539081615d5a565b9550602087013594506040870135935060608701356153ae81615da1565b9598949750929560808101359460a0909101359350915050565b600080602083850312156153da578182fd5b82356001600160401b03808211156153f0578384fd5b818501915085601f830112615403578384fd5b813581811115615411578485fd5b8660208083028501011115615424578485fd5b60209290920196919550909350505050565b600060208284031215615447578081fd5b81356001600160e01b03198116811461368a578182fd5b60006020828403121561546f578081fd5b813561368a81615d7d565b6000806000806080858703121561548f578182fd5b84518060060b811461549f578283fd5b60208601519094506154b081615d5a565b604086015190935063ffffffff811681146154c9578283fd5b60608601519092506001600160c01b03811681146151e3578182fd5b6000602082840312156154f6578081fd5b81516001600160401b0381111561550b578182fd5b8201601f8101841361551b578182fd5b805161552961529d82615d0d565b81815285602083850101111561553d578384fd5b614830826020830160208601615d2e565b60006080828403121561555f578081fd5b50919050565b600060a0828403121561555f578081fd5b600060c0828403121561555f578081fd5b60008183036080811215615599578182fd5b604051604081016001600160401b0382821081831117156155b657fe5b8160405260608412156155c7578485fd5b60a08301935081841081851117156155db57fe5b5082604052843592506155ed83615d5a565b9182526020840135916155ff83615d5a565b82606083015261561160408601615112565b60808301528152615624606085016150f5565b6020820152949350505050565b6000610160828403121561555f578081fd5b600060208284031215615654578081fd5b813561368a81615d8c565b60008060408385031215615671578182fd5b825161567c81615d8c565b602084015190925061518a81615d8c565b600080600080600060a086880312156156a4578283fd5b85516156af81615d8c565b80955050602086015193506040860151925060608601516156cf81615d8c565b60808701519092506156e081615d8c565b809150509295509295909350565b600080600080600080600060e0888a031215615708578485fd5b875161571381615d5a565b602089015190975061572481615d7d565b955061573260408901615100565b945061574060608901615100565b935061574e60808901615100565b925060a088015161575e81615da1565b60c089015190925061576f81615d6f565b8091505092959891949750929550565b600060208284031215615790578081fd5b61146f82615112565b6000602082840312156157aa578081fd5b5035919050565b600080604083850312156157c3578182fd5b82359150602083013561518a81615d5a565b600080604083850312156157e7578182fd5b505080516020909101519092909150565b6000806000806060858703121561580d578182fd5b843593506020850135925060408501356001600160401b0380821115615831578384fd5b818701915087601f830112615844578384fd5b813581811115615852578485fd5b886020828501011115615863578485fd5b95989497505060200194505050565b6000815180845261588a816020860160208601615d2e565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a06080820181905260009061502c90830184615872565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6001600160a01b039687168152602081019590955260408501939093529316606083015263ffffffff928316608083015290911660a082015260c00190565b6000602080830181845280855180835260408601915060408482028701019250838701855b82811015615a1457603f19888603018452615a02858351615872565b945092850192908501906001016159e6565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600292830b8152910b602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261146f6020830184615872565b6020808252600c908201526b139bdd08185c1c1c9bdd995960a21b604082015260600190565b60208082526019908201527822a9219b99189d103737b732bc34b9ba32b73a103a37b5b2b760391b604082015260600190565b602080825260149082015273507269636520736c69707061676520636865636b60601b604082015260600190565b60208082526010908201526f125b9d985b1a59081d1bdad95b88125160821b604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b6001600160c01b0394909416845263ffffffff928316602085015291166040830152606082015260800190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6001600160601b038d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a08201526101808101615c5e60c083018961589e565b615c6b60e08301886158a5565b8561010083015284610120830152615c876101408301856158a5565b615c956101608301846158a5565b9d9c50505050505050505050505050565b6000808335601e19843603018112615cbc578283fd5b8301803591506001600160401b03821115615cd5578283fd5b602001915036819003821315613f0c57600080fd5b6040518181016001600160401b0381118282101715615d0557fe5b604052919050565b60006001600160401b03821115615d2057fe5b50601f01601f191660200190565b60005b83811015615d49578181015183820152602001615d31565b8381111561298a5750506000910152565b6001600160a01b03811681146133aa57600080fd5b80151581146133aa57600080fd5b8060020b81146133aa57600080fd5b6001600160801b03811681146133aa57600080fd5b60ff811681146133aa57600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220609504b7be8c39ea06a62c550504c1044f7991b7d98f4136b8d46336d03e2c4a64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
