{
  "_format": "hh-sol-artifact-1",
  "contractName": "ElixirPool",
  "sourceName": "contracts/elixir-core/ElixirPool.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Burn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "name": "Collect",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "name": "CollectProtocol",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paid0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "paid1",
          "type": "uint256"
        }
      ],
      "name": "Flash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "observationCardinalityNextOld",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "observationCardinalityNextNew",
          "type": "uint16"
        }
      ],
      "name": "IncreaseObservationCardinalityNext",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "Initialize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "indexed": true,
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "name": "Mint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol0Old",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol1Old",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol0New",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "feeProtocol1New",
          "type": "uint8"
        }
      ],
      "name": "SetFeeProtocol",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint144",
          "name": "rewardPerSecondX48",
          "type": "uint144"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "rewardRateEffectiveUntil",
          "type": "uint32"
        }
      ],
      "name": "SetRewardRate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "liquidity",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        }
      ],
      "name": "Swap",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount0Requested",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1Requested",
          "type": "uint128"
        }
      ],
      "name": "collect",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint128",
          "name": "amount0Requested",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1Requested",
          "type": "uint128"
        }
      ],
      "name": "collectProtocol",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "amount0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "amount1",
          "type": "uint128"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "fee",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeGrowthGlobal0X128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeGrowthGlobal1X128",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "flash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "observationCardinalityNext",
          "type": "uint16"
        }
      ],
      "name": "increaseObservationCardinalityNext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        },
        {
          "internalType": "uint24",
          "name": "_fee",
          "type": "uint24"
        },
        {
          "internalType": "int24",
          "name": "_tickSpacing",
          "type": "int24"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidity",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxLiquidityPerTick",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        },
        {
          "internalType": "uint128",
          "name": "amount",
          "type": "uint128"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount0",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount1",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "observations",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "blockTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "int56",
          "name": "tickCumulative",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityCumulativeX128",
          "type": "uint160"
        },
        {
          "internalType": "bool",
          "name": "initialized",
          "type": "bool"
        },
        {
          "internalType": "uint192",
          "name": "rewardPerLiquidityCumulativeX64",
          "type": "uint192"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32[]",
          "name": "secondsAgos",
          "type": "uint32[]"
        }
      ],
      "name": "observe",
      "outputs": [
        {
          "internalType": "int56[]",
          "name": "tickCumulatives",
          "type": "int56[]"
        },
        {
          "internalType": "uint160[]",
          "name": "secondsPerLiquidityCumulativeX128s",
          "type": "uint160[]"
        },
        {
          "internalType": "uint192[]",
          "name": "rewardPerLiquidityCumulativeX64s",
          "type": "uint192[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "positions",
      "outputs": [
        {
          "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": "protocolFees",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "token0",
          "type": "uint128"
        },
        {
          "internalType": "uint128",
          "name": "token1",
          "type": "uint128"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardSlot",
      "outputs": [
        {
          "internalType": "uint144",
          "name": "rewardPerSecondX48",
          "type": "uint144"
        },
        {
          "internalType": "uint32",
          "name": "rewardRateEffectiveUntil",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "feeProtocol0",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "feeProtocol1",
          "type": "uint8"
        }
      ],
      "name": "setFeeProtocol",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint144",
          "name": "rewardPerSecondX48",
          "type": "uint144"
        },
        {
          "internalType": "uint32",
          "name": "rewardRateEffectiveUntil",
          "type": "uint32"
        }
      ],
      "name": "setRewardRate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "slot0",
      "outputs": [
        {
          "internalType": "uint160",
          "name": "sqrtPriceX96",
          "type": "uint160"
        },
        {
          "internalType": "int24",
          "name": "tick",
          "type": "int24"
        },
        {
          "internalType": "uint16",
          "name": "observationIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationCardinality",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "observationCardinalityNext",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "feeProtocol",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "unlocked",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "tickLower",
          "type": "int24"
        },
        {
          "internalType": "int24",
          "name": "tickUpper",
          "type": "int24"
        }
      ],
      "name": "snapshotCumulativesInside",
      "outputs": [
        {
          "internalType": "int56",
          "name": "tickCumulativeInside",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityInsideX128",
          "type": "uint160"
        },
        {
          "internalType": "uint32",
          "name": "secondsInside",
          "type": "uint32"
        },
        {
          "internalType": "uint192",
          "name": "rewardPerLiquidityInsideX64",
          "type": "uint192"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "zeroForOne",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "amountSpecified",
          "type": "int256"
        },
        {
          "internalType": "uint160",
          "name": "sqrtPriceLimitX96",
          "type": "uint160"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "int256",
          "name": "amount0",
          "type": "int256"
        },
        {
          "internalType": "int256",
          "name": "amount1",
          "type": "int256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int16",
          "name": "",
          "type": "int16"
        }
      ],
      "name": "tickBitmap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tickSpacing",
      "outputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "int24",
          "name": "",
          "type": "int24"
        }
      ],
      "name": "ticks",
      "outputs": [
        {
          "internalType": "uint128",
          "name": "liquidityGross",
          "type": "uint128"
        },
        {
          "internalType": "int128",
          "name": "liquidityNet",
          "type": "int128"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthOutside0X128",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "feeGrowthOutside1X128",
          "type": "uint256"
        },
        {
          "internalType": "int56",
          "name": "tickCumulativeOutside",
          "type": "int56"
        },
        {
          "internalType": "uint160",
          "name": "secondsPerLiquidityOutsideX128",
          "type": "uint160"
        },
        {
          "internalType": "uint32",
          "name": "secondsOutside",
          "type": "uint32"
        },
        {
          "internalType": "bool",
          "name": "initialized",
          "type": "bool"
        },
        {
          "internalType": "uint192",
          "name": "rewardPerLiquidityOutsideX64",
          "type": "uint192"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token0",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token1",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50615dd380620000216000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635339c29611610104578063a38807f2116100a2578063ddca3f4311610071578063ddca3f431461092a578063f30583991461094a578063f30dba9314610952578063f637731d146109e3576101cf565b8063a38807f214610890578063c45a0155146108fb578063d0c93a7c14610903578063d21220a714610922576101cf565b806385b66729116100de57806385b667291461069b578063883bdbfd146106d857806394fd4a3e14610826578063a34123a714610856576101cf565b80635339c2961461064b57806370cf754a1461066b5780638206a4d114610673576101cf565b806332148f6711610171578063461413191161014b57806346141319146104fb578063490e6cbc146105155780634f1eb3d8146105a1578063514ea4bf146105f2576101cf565b806332148f67146103df5780633850c7bd146104005780633c8a7d8d14610459576101cf565b80631a686502116101ad5780631a686502146102ed5780631ad8b03b14610311578063218064e514610348578063252c09d71461037a576101cf565b80630dfe1681146101d4578063128acb08146101f857806314f2705c146102a7575b600080fd5b6101dc610a09565b604080516001600160a01b039092168252519081900360200190f35b61028e600480360360a081101561020e57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561024f57600080fd5b82018360208201111561026157600080fd5b8035906020019184600183028401116401000000008311171561028357600080fd5b509092509050610a18565b6040805192835260208301919091528051918290030190f35b6102eb600480360360808110156102bd57600080fd5b506001600160a01b03813581169160208101359091169062ffffff604082013516906060013560020b611635565b005b6102f5611704565b604080516001600160801b039092168252519081900360200190f35b610319611713565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102eb6004803603604081101561035e57600080fd5b5080356001600160901b0316906020013563ffffffff1661172d565b6103976004803603602081101561039057600080fd5b5035611972565b6040805163ffffffff909616865260069490940b60208601526001600160a01b0390921684840152151560608401526001600160c01b03166080830152519081900360a00190f35b6102eb600480360360208110156103f557600080fd5b503561ffff166119cd565b610408611abe565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61028e600480360360a081101561046f57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a0810160808201356401000000008111156104bc57600080fd5b8201836020820111156104ce57600080fd5b803590602001918460018302840111640100000000831117156104f057600080fd5b509092509050611b0e565b610503611de7565b60408051918252519081900360200190f35b6102eb6004803603608081101561052b57600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561056257600080fd5b82018360208201111561057457600080fd5b8035906020019184600183028401116401000000008311171561059657600080fd5b509092509050611ded565b610319600480360360a08110156105b757600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516612235565b61060f6004803603602081101561060857600080fd5b503561242d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b6105036004803603602081101561066157600080fd5b503560010b61246a565b6102f561247c565b6102eb6004803603604081101561068957600080fd5b5060ff8135811691602001351661248b565b610319600480360360608110156106b157600080fd5b506001600160a01b03813516906001600160801b0360208201358116916040013516612664565b610748600480360360208110156106ee57600080fd5b81019060208101813564010000000081111561070957600080fd5b82018360208201111561071b57600080fd5b8035906020019184602083028401116401000000008311171561073d57600080fd5b5090925090506128ee565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610790578181015183820152602001610778565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156107cf5781810151838201526020016107b7565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561080e5781810151838201526020016107f6565b50505050905001965050505050505060405180910390f35b61082e61299d565b604080516001600160901b03909316835263ffffffff90911660208301528051918290030190f35b61028e6004803603606081101561086c57600080fd5b508035600290810b91602081013590910b90604001356001600160801b03166129bb565b6108ba600480360360408110156108a657600080fd5b508035600290810b9160200135900b612b37565b6040805160069590950b85526001600160a01b03909316602085015263ffffffff909116838301526001600160c01b03166060830152519081900360800190f35b6101dc612e29565b61090b612e38565b6040805160029290920b8252519081900360200190f35b6101dc612e48565b610932612e57565b6040805162ffffff9092168252519081900360200190f35b610503612e69565b6109726004803603602081101561096857600080fd5b503560020b612e6f565b604080516001600160801b03909a168a52600f9890980b60208a015288880196909652606088019490945260069290920b60808701526001600160a01b031660a086015263ffffffff1660c0850152151560e08401526001600160c01b031661010083015251908190036101200190f35b6102eb600480360360208110156109f957600080fd5b50356001600160a01b0316612eec565b6001546001600160a01b031681565b60008085610a52576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526004546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c08201819052610b0b576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610b565780600001516001600160a01b0316866001600160a01b0316118015610b51575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610b88565b80600001516001600160a01b0316866001600160a01b0316108015610b8857506401000276a36001600160a01b038716115b610bbf576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6004805460ff60f01b19169055604080516101608101909152600090808a610bf25760048460a0015160ff16901c610c05565b60108460a0015160ff1681610c0357fe5b065b60ff1681526009546001600160801b03166020820152604001610c2661308b565b63ffffffff168152602001600060060b815260200160006001600160a01b0316815260200160001515815260200160006001600160c01b03168152602001600260149054906101000a900462ffffff1662ffffff168152602001600260179054906101000a900460020b60020b8152602001600160009054906101000a90046001600160a01b03166001600160a01b03168152602001600260009054906101000a90046001600160a01b03166001600160a01b031681525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610d2e57600754610d32565b6006545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610d815750886001600160a01b031681604001516001600160a01b031614155b1561114257610d8e615d33565b60408201516001600160a01b031681526060820151610100850151610db691600b918f61308f565b15156040830152600290810b810b60208301819052620d89e719910b1215610de757620d89e7196020820152610e06565b6020810151620d89e860029190910b1315610e0657620d89e860208201525b610e1381602001516131d1565b6001600160a01b031660608201526040820151610e88908d610e4d578b6001600160a01b031683606001516001600160a01b031611610e67565b8b6001600160a01b031683606001516001600160a01b0316105b610e75578260600151610e77565b8b5b60c0850151855160e0890151613503565b60c085015260a084015260808301526001600160a01b031660408301528215610eea57610ebe8160c001518260800151016136f5565b825103825260a0810151610ee090610ed5906136f5565b60208401519061370b565b6020830152610f25565b610ef78160a001516136f5565b825101825260c08101516080820151610f1f91610f1491016136f5565b602084015190613727565b60208301525b835160ff1615610f6b576000846000015160ff168260c0015181610f4557fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610faa57610f9e8160c00151600160801b8460c001516001600160801b031661373d565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415611101578060400151156110d8578360a0015161105c57604080850151602080880151928801519087015160055460608a015161102c95600d9594600094919390926001600160901b0382169163ffffffff600160901b909104811691906137ed16565b6001600160c01b031660c08701526001600160a01b03166080860152600690810b900b6060850152600160a08501525b60006110ae82602001518e61107357600654611079565b84608001515b8f61108857856080015161108c565b6007545b608089015160608a015160408b015160c08c0151600a969594939291906139eb565b90508c156110ba576000035b6110c88360c0015182613b01565b6001600160801b031660c0840152505b8b6110e75780602001516110f0565b60018160200151035b600290810b900b606083015261113c565b80600001516001600160a01b031682604001516001600160a01b03161461113c5761112f8260400151613bb7565b600290810b900b60608301525b50610d5b565b836020015160020b816060015160020b1461122d576040808501519084015160208087015190860151600554606089015160808a015160009687966111ad96600d969295919490936001600160901b0383169263ffffffff600160901b9091048116929190613ee316565b604085015160608601516004805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b03909116179055506112529050565b6040810151600480546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146112985760c0810151600980546001600160801b0319166001600160801b039092169190911790555b8a156112e857608081015160065560a08101516001600160801b0316156112e35760a0810151600880546001600160801b031981166001600160801b03918216909301169190911790555b61132e565b608081015160075560a08101516001600160801b03161561132e5760a0810151600880546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b15151461134757602081015181518b03611354565b80600001518a0381602001515b90965094508a1561147e57600085121561137b5761137b8361014001518d876000036140ee565b600061138b846101200151614251565b9050336001600160a01b031663d804d7a788888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b50505050611435846101200151614251565b61143f8289614382565b1115611478576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611599565b600086121561149a5761149a8361012001518d886000036140ee565b60006114aa846101400151614251565b9050336001600160a01b031663d804d7a788888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561152e57600080fd5b505af1158015611542573d6000803e3d6000fd5b50505050611554846101400151614251565b61155e8288614382565b1115611597576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506004805460ff60f01b1916600160f01b17905550919890975095505050505050565b6000546001600160a01b03161561164b57600080fd5b60008054336001600160a01b0319918216179091556001805482166001600160a01b0387811691909117909155600280549092169085161762ffffff60a01b1916600160a01b62ffffff85811691909102919091177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b84840b92909216919091021790556116de81614392565b600380546001600160801b0319166001600160801b039290921691909117905550505050565b6009546001600160801b031681565b6008546001600160801b0380821691600160801b90041682565b600454600160f01b900460ff16611771576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916815560005460408051638da5cb5b60e01b815290516001600160a01b0390921692638da5cb5b928282019260209290829003018186803b1580156117bf57600080fd5b505afa1580156117d3573d6000803e3d6000fd5b505050506040513d60208110156117e957600080fd5b50516001600160a01b031633146117ff57600080fd5b428163ffffffff16101561181257600080fd5b60045461188690600160b81b900461ffff1661182c61308b565b600454600954600554600d949392600160a01b810460020b926001600160801b0316916001600160901b0381169163ffffffff600160901b90920482169161ffff600160c81b8304811692600160d81b90041690613ee316565b6004805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b93909216929092021790556040805180820182526001600160901b03841680825263ffffffff841660209283018190526005805471ffffffffffffffffffffffffffffffffffff191683177fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff16600160901b830217905583519182529181019190915281517e8866b45af6018e497020f8d16e58c1be320850f245ebdf9d304666bee15e35929181900390910190a150506004805460ff60f01b1916600160f01b179055565b600d8161ffff811061198357600080fd5b60020201805460019091015463ffffffff82169250640100000000820460060b91600160581b81046001600160a01b031691600160f81b90910460ff16906001600160c01b031685565b600454600160f01b900460ff16611a11576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b191690819055600160d81b900461ffff166000611a39600d83856143fc565b6004805461ffff808416600160d81b810261ffff60d81b1990931692909217909255919250831614611aa6576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506004805460ff60f01b1916600160f01b17905550565b6004546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b6004546000908190600160f01b900460ff16611b57576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b191690556001600160801b038516611b7757600080fd5b600080611bc560405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b8152602001611bbb8a6001600160801b03166144a2565b600f0b90526144b3565b6001546002549297509095508694508593506000925082916001600160a01b0391821691168515611bfc57611bf982614251565b93505b8615611c0e57611c0b81614251565b92505b336001600160a01b0316631507a8f489898d8d6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050506000881115611cfc57611cba82614251565b611cc4858a614382565b1115611cfc576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b8615611d4d57611d0b81614251565b611d158489614382565b1115611d4d576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8b60020b8d60020b8f6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338f8d8d60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506004805460ff60f01b1916600160f01b17905550939a92995091975050505050505050565b60075481565b600454600160f01b900460ff16611e31576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b191690556009546001600160801b031680611e80576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b6040805160a0810182526001546001600160a01b0390811682526002549081166020830152600160a01b900462ffffff16918101829052600060608201819052608082015290611ed5908790620f424061470a565b60608201526040810151611ef390869062ffffff16620f424061470a565b60808201528051600090611f0690614251565b90506000611f178360200151614251565b90508715611f2c578251611f2c908a8a6140ee565b8615611f4157611f4183602001518a896140ee565b336001600160a01b0316630659efa68460600151856080015189896040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b505050506000611ff28460000151614251565b905060006120038560200151614251565b90508161201d86606001518661438290919063ffffffff16565b1115612055576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b8061206d86608001518561438290919063ffffffff16565b11156120a5576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b838203838203811561213457600454600160e81b9004600f16600081156120d8578160ff1684816120d257fe5b046120db565b60005b90506001600160801b0381161561210e57600880546001600160801b038082168401166001600160801b03199091161790555b612128818503600160801b8c6001600160801b031661373d565b60068054909101905550505b80156121bf5760048054600160e81b9004901c600f1660008115612164578160ff16838161215e57fe5b04612167565b60005b90506001600160801b0381161561219957600880546001600160801b03600160801b8083048216850182160291161790555b6121b3818403600160801b8c6001600160801b031661373d565b60078054909101905550505b604080518d8152602081018d90528082018490526060810183905290516001600160a01b038f169133917fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339181900360800190a350506004805460ff60f01b1916600160f01b1790555050505050505050505050565b6004546000908190600160f01b900460ff1661227e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b19169055600061229a600c338989614744565b60038101549091506001600160801b03908116908616116122bb57846122ca565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b9091048116908516116122f25783612308565b6003810154600160801b90046001600160801b03165b91506001600160801b0383161561235a576003810180546001600160801b031981166001600160801b0391821686900382161790915560015461235a916001600160a01b03909116908a9086166140ee565b6001600160801b038216156123ad576003810180546001600160801b03600160801b8083048216869003821602918116919091179091556002546123ad916001600160a01b03909116908a9085166140ee565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506004805460ff60f01b1916600160f01b17905590969095509350505050565b600c6020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b600b6020526000908152604090205481565b6003546001600160801b031681565b600454600160f01b900460ff166124cf576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916815560005460408051638da5cb5b60e01b815290516001600160a01b0390921692638da5cb5b928282019260209290829003018186803b15801561251d57600080fd5b505afa158015612531573d6000803e3d6000fd5b505050506040513d602081101561254757600080fd5b50516001600160a01b0316331461255d57600080fd5b60ff82161580612580575060048260ff16101580156125805750600a8260ff1611155b80156125aa575060ff811615806125aa575060048160ff16101580156125aa5750600a8160ff1611155b6125b357600080fd5b60048054610ff083831b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84161784556040805191909304600f81811683529481901c909416602082015285821681840152848216606082015291519216917f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1339181900360800190a150506004805460ff60f01b1916600160f01b17905550565b6004546000908190600160f01b900460ff166126ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916815560005460408051638da5cb5b60e01b815290516001600160a01b0390921692638da5cb5b928282019260209290829003018186803b1580156126fb57600080fd5b505afa15801561270f573d6000803e3d6000fd5b505050506040513d602081101561272557600080fd5b50516001600160a01b0316331461273b57600080fd5b6008546001600160801b03908116908516116127575783612764565b6008546001600160801b03165b6008549092506001600160801b03600160801b90910481169084161161278a578261279e565b600854600160801b90046001600160801b03165b90506001600160801b0382161561280c576008546001600160801b03838116911614156127cd57600019909101905b600880546001600160801b031981166001600160801b0391821685900382161790915560015461280c916001600160a01b0390911690879085166140ee565b6001600160801b0381161561287f576008546001600160801b03828116600160801b90920416141561283d57600019015b600880546001600160801b03600160801b80830482168590038216029181169190911790915560025461287f916001600160a01b0390911690879084166140ee565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36004805460ff60f01b1916600160f01b1790559094909350915050565b60608060606129906128fe61308b565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600454600954600554600d96959450600160a01b830460020b935061ffff600160b81b84048116936001600160801b03909316926001600160901b0383169263ffffffff600160901b909104811692600160c81b909204909116906147a816565b9250925092509250925092565b6005546001600160901b03811690600160901b900463ffffffff1682565b6004546000908190600160f01b900460ff16612a04576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916905560408051608081018252338152600287810b602083015286900b9181019190915260009081908190612a609060608101612a536001600160801b038a166144a2565b600003600f0b90526144b3565b9250925092508160000394508060000393506000851180612a815750600084115b15612ac0576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506004805460ff60f01b1916600160f01b179055509094909350915050565b600080600080612b478686614965565b612b4f615d6f565b612b57615d6f565b600288810b810b6000908152600a602090815260408083208b850b90940b8352918290206003840154600485015460ff600160f81b8304161515608089018190526001600160c01b03909116606089015263ffffffff600160d81b830416948801949094526001600160a01b0367010000000000000082041692870192909252600691820b820b90910b855290612bed57600080fd5b6003810154600482015460ff600160f81b8304161515608086018190526001600160c01b03909116606086015263ffffffff600160d81b83041660408601526001600160a01b036701000000000000008304166020860152600691820b820b90910b8452612c5a57600080fd5b50506040805160e0810182526004546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c083015290918a820b910b1215612d275781600001518360000151038260200151846020015103836040015185604001510384606001518660600151039650965096509650505050612e20565b8760020b816020015160020b1215612de8576000612d4361308b565b60208301516040840151600954600554606087015194955060009485948594612d9a94600d948a94889493926001600160801b0316916001600160901b0381169163ffffffff600160901b9092048216916137ed16565b92509250925085600001518760000151840303866020015188602001518403038760400151896040015187030388606001518a606001518503039a509a509a509a5050505050505050612e20565b826000015182600001510383602001518360200151038460400151846040015103856060015185606001510396509650965096505050505b92959194509250565b6000546001600160a01b031681565b60028054600160b81b9004900b81565b6002546001600160a01b031681565b600254600160a01b900462ffffff1681565b60065481565b600a60205260009081526040902080546001820154600283015460038401546004909401546001600160801b03841694600160801b909404600f0b93600681900b9167010000000000000082046001600160a01b031691600160d81b810463ffffffff1691600160f81b90910460ff16906001600160c01b031689565b6004546001600160a01b031615612f2f576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612f3a82613bb7565b9050600080612f52612f4a61308b565b600d90614a2e565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a0880192909252600160c09097019690965260048054600160f01b6001600160a01b0319909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9097029690961761ffff60d81b1916600160d81b909102177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b4290565b60008060008460020b8660020b816130a357fe5b05905060008660020b1280156130ca57508460020b8660020b816130c357fe5b0760020b15155b156130d457600019015b8315613149576000806130e683614a91565b600182810b810b600090815260208d9052604090205460ff83169190911b8001600019019081168015159750929450909250908561312b57888360ff1686030261313e565b8861313582614aa3565b840360ff168603025b9650505050506131c7565b60008061315883600101614a91565b91509150600060018260ff166001901b031990506000818b60008660010b60010b81526020019081526020016000205416905080600014159550856131aa57888360ff0360ff168660010101026131c0565b88836131b583614b43565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b126131e8578260020b6131f0565b8260020b6000035b9050620d89e881111561322e576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661324257600160801b613254565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613288576ffff97272373d413259a46990580e213a0260801c5b60048216156132a7576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156132c6576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156132e5576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613304576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613323576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613342576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613362576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613382576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156133a2576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156133c2576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156133e2576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613402576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613422576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613442576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613463576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613483576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156134a2576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156134bf576b048a170391f7dc42444e8fa20260801c5b60008460020b13156134da5780600019816134d657fe5b0490505b6401000000008106156134ee5760016134f1565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061358857600061353c8989620f42400362ffffff16620f424061373d565b905082613555576135508c8c8c6001614c2d565b613562565b6135628b8d8c6001614ca8565b9550858110613573578a9650613582565b61357f8c8b8386614d65565b96505b506135d2565b8161359f5761359a8b8b8b6000614ca8565b6135ac565b6135ac8a8c8b6000614c2d565b93508388600003106135c0578995506135d2565b6135cf8b8a8a60000385614db1565b95505b6001600160a01b038a8116908716148215613635578080156135f15750815b61360757613602878d8c6001614ca8565b613609565b855b9550808015613616575081155b61362c57613627878d8c6000614c2d565b61362e565b845b945061367f565b80801561363f5750815b613655576136508c888c6001614c2d565b613657565b855b9550808015613664575081155b61367a576136758c888c6000614ca8565b61367c565b845b94505b8115801561368f57508860000385115b1561369b578860000394505b8180156136ba57508a6001600160a01b0316876001600160a01b031614155b156136c95785890393506136e6565b6136e3868962ffffff168a620f42400362ffffff1661470a565b93505b50505095509550955095915050565b6000600160ff1b821061370757600080fd5b5090565b8082038281131560008312151461372157600080fd5b92915050565b8181018281121560008312151461372157600080fd5b6000808060001985870986860292508281109083900303905080613773576000841161376857600080fd5b5082900490506137e6565b80841161377f57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6000808063ffffffff8a166138b95760008c8961ffff1661ffff811061380f57fe5b6040805160a08101825260029290920292909201805463ffffffff8082168085526401000000008304600690810b810b900b6020860152600160581b83046001600160a01b031695850195909552600160f81b90910460ff16151560608401526001909101546001600160c01b031660808301529092508d161461389e5761389b818d8c8b8b8b614dfd565b90505b806020015181604001518260800151935093509350506139dc565b898b036000806138d08f8f858f8f8f8f8f8f614f47565b91509150816000015163ffffffff168363ffffffff161415613909578160200151826040015183608001519550955095505050506139dc565b805163ffffffff84811691161415613938578060200151816040015182608001519550955095505050506139dc565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b8161396657fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161399857fe5b048560400151018263ffffffff168463ffffffff1687608001518760800151036001600160c01b0316816139c857fe5b040286608001510197509750975050505050505b99509950999650505050505050565b600296870b870b60009081526020989098526040909720600181018054909603909555948401805490930390925560038301805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90950390940b66ffffffffffffff1666ffffffffffffff19909416939093178281048416909503909216027fff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091556004810180546001600160c01b038082169094039093166001600160c01b03199093169290921790915554600160801b9004600f0b90565b60008082600f0b1215613b6657826001600160801b03168260000384039150816001600160801b031610613b61576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b613721565b826001600160801b03168284019150816001600160801b03161015613721576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590613bf3575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613c28576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110613cc957607f810383901c9150613cd3565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613ed457886001600160a01b0316613eb8826131d1565b6001600160a01b03161115613ecd5781613ecf565b805b613ed6565b815b9998505050505050505050565b60008060008b8b61ffff1661ffff8110613ef957fe5b6040805160a08101825260029290920292909201805463ffffffff8082168085526401000000008304600690810b810b900b6020860152600160581b83046001600160a01b031695850195909552600160f81b90910460ff16151560608401526001909101546001600160c01b031660808301529092508b161415613f84578a8592509250506140e0565b8461ffff168461ffff16118015613fa557506001850361ffff168b61ffff16145b15613fb257839150613fb6565b8491505b8161ffff168b60010161ffff1681613fca57fe5b069250613fdb818b8b8b8b8b614dfd565b8c8461ffff1661ffff8110613fec57fe5b825160029190910291909101805460208401516040850151606086015163ffffffff1990931663ffffffff909516949094176affffffffffffff00000000191664010000000066ffffffffffffff60069390930b9290921691909102177fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b6001600160a01b0390941693909302929092177effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b92151592909202919091178155608090910151600190910180546001600160c01b0319166001600160c01b03909216919091179055505b995099975050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1781529251825160009485949389169392918291908083835b6020831061417f5780518252601f199092019160209182019101614160565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141e1576040519150601f19603f3d011682016040523d82523d6000602084013e6141e6565b606091505b5091509150818015614214575080511580614214575080806020019051602081101561421157600080fd5b50515b61424a576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166370a0823160e01b17815291518151600093849384936001600160a01b03881693919290918291908083835b602083106142df5780518252601f1990920191602091820191016142c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461433f576040519150601f19603f3d011682016040523d82523d6000602084013e614344565b606091505b509150915081801561435857506020815110155b61436157600080fd5b80806020019051602081101561437657600080fd5b5051925050505b919050565b8082018281101561372157600080fd5b60008082600281900b620d89e719816143a757fe5b05029050600083600281900b620d89e8816143be57fe5b0502905060008460020b83830360020b816143d557fe5b0560010190508062ffffff166001600160801b038016816143f257fe5b0495945050505050565b6000808361ffff161161443a576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff16116144505750816137e6565b825b8261ffff168161ffff161015614499576001858261ffff1661ffff811061447557fe5b60020201805463ffffffff191663ffffffff92909216919091179055600101614452565b50909392505050565b80600f81900b811461437d57600080fd5b60008060006144ca84602001518560400151614965565b6040805160e0810182526004546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461456e949193909290919061518e565b93508460600151600f0b60001461470257846020015160020b816020015160020b12156145c3576145bc6145a586602001516131d1565b6145b287604001516131d1565b8760600151615311565b9250614702565b846040015160020b816020015160020b12156146d85760095460408201516001600160801b0390911690614634906145f961308b565b602085015160055460608701516080880151600d9594939288926001600160901b0382169263ffffffff600160901b909304831692613ee316565b6004805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614684919061467a906131d1565b8860600151615311565b93506146a261469687602001516131d1565b83516060890151615355565b92506146b2818760600151613b01565b600980546001600160801b0319166001600160801b039290921691909117905550614702565b6146ff6146e886602001516131d1565b6146f587604001516131d1565b8760600151615355565b91505b509193909250565b600061471784848461373d565b90506000828061472357fe5b84860911156137e657600019811061473a57600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b606080606060008461ffff16116147ea576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b895167ffffffffffffffff8111801561480257600080fd5b5060405190808252806020026020018201604052801561482c578160200160208202803683370190505b509250895167ffffffffffffffff8111801561484757600080fd5b50604051908082528060200260200182016040528015614871578160200160208202803683370190505b509150895167ffffffffffffffff8111801561488c57600080fd5b506040519080825280602002602001820160405280156148b6578160200160208202803683370190505b50905060005b8a51811015614955576148e98d8d8d84815181106148d657fe5b60200260200101518d8d8d8d8d8d6137ed565b8684815181106148f557fe5b6020026020010186858151811061490857fe5b6020026020010186868151811061491b57fe5b6001600160c01b03909416602094850291909101909301929092526001600160a01b039092169052600691820b90910b90526001016148bc565b5099509950999650505050505050565b8060020b8260020b126149a5576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b12156149e8576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614a2a576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160a08101825263ffffffff928316808252600060208301819052928201839052600160608301819052608090920192909252835463ffffffff1916909117909116600160f81b17825590810180546001600160c01b0319169055908190565b60020b600881901d9161010090910790565b6000808211614ab157600080fd5b600160801b8210614ac457608091821c91015b680100000000000000008210614adc57604091821c91015b6401000000008210614af057602091821c91015b620100008210614b0257601091821c91015b6101008210614b1357600891821c91015b60108210614b2357600491821c91015b60048210614b3357600291821c91015b6002821061437d57600101919050565b6000808211614b5157600080fd5b5060ff6001600160801b03821615614b6c57607f1901614b74565b608082901c91505b67ffffffffffffffff821615614b8d57603f1901614b95565b604082901c91505b63ffffffff821615614baa57601f1901614bb2565b602082901c91505b61ffff821615614bc557600f1901614bcd565b601082901c91505b60ff821615614bdf5760071901614be7565b600882901c91505b600f821615614bf95760031901614c01565b600482901c91505b6003821615614c135760011901614c1b565b600282901c91505b600182161561437d5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614c4d579293925b81614c7a57614c75836001600160801b03168686036001600160a01b0316600160601b61373d565b614c9d565b614c9d836001600160801b03168686036001600160a01b0316600160601b61470a565b90505b949350505050565b6000836001600160a01b0316856001600160a01b03161115614cc8579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b038686038116908716614d0457600080fd5b83614d3457866001600160a01b0316614d278383896001600160a01b031661373d565b81614d2e57fe5b04614d5a565b614d5a614d4b8383896001600160a01b031661470a565b886001600160a01b0316615384565b979650505050505050565b600080856001600160a01b031611614d7c57600080fd5b6000846001600160801b031611614d9257600080fd5b81614da457614c75858585600161538f565b614c9d8585856001615470565b600080856001600160a01b031611614dc857600080fd5b6000846001600160801b031611614dde57600080fd5b81614df057614c758585856000615470565b614c9d858585600061538f565b614e05615d6f565b865186036001600160801b038516614e1e576001614e20565b845b9450600063ffffffff4211614e6b57428463ffffffff1610614e425781614e66565b886000015163ffffffff168463ffffffff161115614e635788518403614e66565b60005b614e6e565b60005b90506040518060a001604052808963ffffffff1681526020018363ffffffff168960020b028b602001510160060b8152602001876001600160801b031660808563ffffffff166001600160a01b0316901b6001600160a01b031681614ecf57fe5b048b60400151016001600160a01b03168152602001600115158152602001876001600160801b03168363ffffffff166010896001600160901b03166001600160c01b0316901b026001600160c01b031681614f2657fe5b048b60800151016001600160c01b0316815250925050509695505050505050565b614f4f615d6f565b614f57615d6f565b8a8761ffff1661ffff8110614f6857fe5b6040805160a08101825260029290920292909201805463ffffffff81168084526401000000008204600690810b810b900b6020850152600160581b82046001600160a01b031694840194909452600160f81b900460ff1615156060830152600101546001600160c01b031660808201529250614fe6908b908b615565565b15615020578863ffffffff16826000015163ffffffff161415615008576140e0565b81615017838b8b8a8a8a614dfd565b915091506140e0565b8a8361ffff168860010161ffff168161503557fe5b0661ffff1661ffff811061504557fe5b6040805160a08101825260029290920292909201805463ffffffff811683526401000000008104600690810b810b900b6020840152600160581b81046001600160a01b031693830193909352600160f81b90920460ff161515606082018190526001909201546001600160c01b031660808201529250615129576040805160a0810182528c5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015260018c01546001600160c01b0316608082015291505b6151388a83600001518b615565565b61516f576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b61517c8b8b8b8a87615628565b91509150995099975050505050505050565b600061519d600c878787614744565b60065460075491925090600080600f87900b156152b15760006151be61308b565b6004546009546005549293506000928392839261522992600d9288928692600160a01b830460020b9261ffff600160b81b82048116936001600160801b0316926001600160901b0381169263ffffffff600160901b909204821692600160c81b90910416906137ed16565b60035492955090935091506001600160801b0316615253600a8f8d8f8d8d898b8d60008b8d6157fd565b965061526b600a8e8d8f8d8d898b8d60018b8d6157fd565b60028054919750600160b81b909104900b8715615298576152988f82600b615a359092919063ffffffff16565b86156152aa576152aa600b8f83615a35565b5050505050505b6000806152c3600a8c8c8b8a8a615a9b565b90925090506152d4878a8484615b47565b600089600f0b12156153025783156152f1576152f1600a8c615cdc565b821561530257615302600a8b615cdc565b50505050505095945050505050565b60008082600f0b126153375761533261532d8585856001614ca8565b6136f5565b614ca0565b61534a61532d8585856000036000614ca8565b600003949350505050565b60008082600f0b126153715761533261532d8585856001614c2d565b61534a61532d8585856000036000614c2d565b808204910615150190565b600081156154025760006001600160a01b038411156153c5576153c084600160601b876001600160801b031661373d565b6153dd565b6001600160801b038516606085901b816153db57fe5b045b90506153fa6153f56001600160a01b03881683614382565b615d1d565b915050614ca0565b60006001600160a01b038411156154305761542b84600160601b876001600160801b031661470a565b615447565b615447606085901b6001600160801b038716615384565b905080866001600160a01b03161161545e57600080fd5b6001600160a01b038616039050614ca0565b60008261547e575083614ca0565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b16821561551e576001600160a01b038616848102908582816154be57fe5b0414156154ef578181018281106154ed576154e383896001600160a01b03168361470a565b9350505050614ca0565b505b61551582615510878a6001600160a01b0316868161550957fe5b0490614382565b615384565b92505050614ca0565b6001600160a01b0386168481029085828161553557fe5b0414801561554257508082115b61554b57600080fd5b8082036154e36153f5846001600160a01b038b168461470a565b60008363ffffffff168363ffffffff161115801561558f57508363ffffffff168263ffffffff1611155b156155ab578163ffffffff168363ffffffff16111590506137e6565b60008463ffffffff168463ffffffff16116155d3578363ffffffff16640100000000016155db565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161560c578363ffffffff1664010000000001615614565b8363ffffffff165b64ffffffffff169091111595945050505050565b615630615d6f565b615638615d6f565b60008361ffff168560010161ffff168161564e57fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161567b57fe5b0661ffff811061568757fe5b6040805160a08101825260029290920292909201805463ffffffff811683526401000000008104600690810b810b900b6020840152600160581b81046001600160a01b031693830193909352600160f81b90920460ff161515606082018190526001909201546001600160c01b03166080820152955061570c57806001019250615666565b898661ffff16826001018161571d57fe5b0661ffff811061572957fe5b6040805160a08101825260029290920292909201805463ffffffff811683526401000000008104600690810b810b900b6020840152600160581b81046001600160a01b031693830193909352600160f81b90920460ff16151560608201526001909101546001600160c01b0316608082015285519094506000906157af908b908b615565565b90508080156157c857506157c88a8a8760000151615565565b156157d357506157f0565b806157e3576001820392506157ea565b8160010193505b50615666565b5050509550959350505050565b60028b810b900b600090815260208d90526040812080546001600160801b031682615828828e613b01565b9050856001600160801b0316816001600160801b03161115615876576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015615981578d60020b8f60020b13615951578b83600101819055508a8360020181905550898360030160076101000a8154816001600160a01b0302191690836001600160a01b03160217905550888360030160006101000a81548166ffffffffffffff021916908360060b66ffffffffffffff1602179055508783600301601b6101000a81548163ffffffff021916908363ffffffff160217905550848360040160006101000a8154816001600160c01b0302191690836001600160c01b031602179055505b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355866159d6576159d16159cc8e600f0b8560000160109054906101000a9004600f0b600f0b61372790919063ffffffff16565b6144a2565b615a03565b615a036159cc8e600f0b8560000160109054906101000a9004600f0b600f0b61370b90919063ffffffff16565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909d9c50505050505050505050505050565b8060020b8260020b81615a4457fe5b0760020b15615a5257600080fd5b600080615a6d8360020b8560020b81615a6757fe5b05614a91565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b12615ae157505060018201546002830154615af4565b8360010154880391508360020154870390505b6000808b60020b8b60020b1215615b1657505060018301546002840154615b29565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b615be65781516001600160801b0316615bde576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615bf5565b8151615bf29086613b01565b90505b6000615c198360200151860384600001516001600160801b0316600160801b61373d565b90506000615c3f8460400151860385600001516001600160801b0316600160801b61373d565b905086600f0b600014615c665787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b038216151580615c9457506000816001600160801b0316115b15615cd2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b60009081526020929092526040822082815560018101839055908101829055600381019190915560040180546001600160c01b0319169055565b806001600160a01b038116811461437d57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091529056fea264697066735822122077f216df62bac6d2389ed5ed695bbeac8d557a5f189904f27ed4a6d2818f636a64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80635339c29611610104578063a38807f2116100a2578063ddca3f4311610071578063ddca3f431461092a578063f30583991461094a578063f30dba9314610952578063f637731d146109e3576101cf565b8063a38807f214610890578063c45a0155146108fb578063d0c93a7c14610903578063d21220a714610922576101cf565b806385b66729116100de57806385b667291461069b578063883bdbfd146106d857806394fd4a3e14610826578063a34123a714610856576101cf565b80635339c2961461064b57806370cf754a1461066b5780638206a4d114610673576101cf565b806332148f6711610171578063461413191161014b57806346141319146104fb578063490e6cbc146105155780634f1eb3d8146105a1578063514ea4bf146105f2576101cf565b806332148f67146103df5780633850c7bd146104005780633c8a7d8d14610459576101cf565b80631a686502116101ad5780631a686502146102ed5780631ad8b03b14610311578063218064e514610348578063252c09d71461037a576101cf565b80630dfe1681146101d4578063128acb08146101f857806314f2705c146102a7575b600080fd5b6101dc610a09565b604080516001600160a01b039092168252519081900360200190f35b61028e600480360360a081101561020e57600080fd5b6001600160a01b0382358116926020810135151592604082013592606083013516919081019060a08101608082013564010000000081111561024f57600080fd5b82018360208201111561026157600080fd5b8035906020019184600183028401116401000000008311171561028357600080fd5b509092509050610a18565b6040805192835260208301919091528051918290030190f35b6102eb600480360360808110156102bd57600080fd5b506001600160a01b03813581169160208101359091169062ffffff604082013516906060013560020b611635565b005b6102f5611704565b604080516001600160801b039092168252519081900360200190f35b610319611713565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b6102eb6004803603604081101561035e57600080fd5b5080356001600160901b0316906020013563ffffffff1661172d565b6103976004803603602081101561039057600080fd5b5035611972565b6040805163ffffffff909616865260069490940b60208601526001600160a01b0390921684840152151560608401526001600160c01b03166080830152519081900360a00190f35b6102eb600480360360208110156103f557600080fd5b503561ffff166119cd565b610408611abe565b604080516001600160a01b03909816885260029690960b602088015261ffff9485168787015292841660608701529216608085015260ff90911660a0840152151560c0830152519081900360e00190f35b61028e600480360360a081101561046f57600080fd5b6001600160a01b03823516916020810135600290810b92604083013590910b916001600160801b036060820135169181019060a0810160808201356401000000008111156104bc57600080fd5b8201836020820111156104ce57600080fd5b803590602001918460018302840111640100000000831117156104f057600080fd5b509092509050611b0e565b610503611de7565b60408051918252519081900360200190f35b6102eb6004803603608081101561052b57600080fd5b6001600160a01b03823516916020810135916040820135919081019060808101606082013564010000000081111561056257600080fd5b82018360208201111561057457600080fd5b8035906020019184600183028401116401000000008311171561059657600080fd5b509092509050611ded565b610319600480360360a08110156105b757600080fd5b506001600160a01b03813516906020810135600290810b91604081013590910b906001600160801b0360608201358116916080013516612235565b61060f6004803603602081101561060857600080fd5b503561242d565b604080516001600160801b0396871681526020810195909552848101939093529084166060840152909216608082015290519081900360a00190f35b6105036004803603602081101561066157600080fd5b503560010b61246a565b6102f561247c565b6102eb6004803603604081101561068957600080fd5b5060ff8135811691602001351661248b565b610319600480360360608110156106b157600080fd5b506001600160a01b03813516906001600160801b0360208201358116916040013516612664565b610748600480360360208110156106ee57600080fd5b81019060208101813564010000000081111561070957600080fd5b82018360208201111561071b57600080fd5b8035906020019184602083028401116401000000008311171561073d57600080fd5b5090925090506128ee565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610790578181015183820152602001610778565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156107cf5781810151838201526020016107b7565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561080e5781810151838201526020016107f6565b50505050905001965050505050505060405180910390f35b61082e61299d565b604080516001600160901b03909316835263ffffffff90911660208301528051918290030190f35b61028e6004803603606081101561086c57600080fd5b508035600290810b91602081013590910b90604001356001600160801b03166129bb565b6108ba600480360360408110156108a657600080fd5b508035600290810b9160200135900b612b37565b6040805160069590950b85526001600160a01b03909316602085015263ffffffff909116838301526001600160c01b03166060830152519081900360800190f35b6101dc612e29565b61090b612e38565b6040805160029290920b8252519081900360200190f35b6101dc612e48565b610932612e57565b6040805162ffffff9092168252519081900360200190f35b610503612e69565b6109726004803603602081101561096857600080fd5b503560020b612e6f565b604080516001600160801b03909a168a52600f9890980b60208a015288880196909652606088019490945260069290920b60808701526001600160a01b031660a086015263ffffffff1660c0850152151560e08401526001600160c01b031661010083015251908190036101200190f35b6102eb600480360360208110156109f957600080fd5b50356001600160a01b0316612eec565b6001546001600160a01b031681565b60008085610a52576040805162461bcd60e51b8152602060048201526002602482015261415360f01b604482015290519081900360640190fd5b6040805160e0810182526004546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c08201819052610b0b576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b87610b565780600001516001600160a01b0316866001600160a01b0316118015610b51575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038716105b610b88565b80600001516001600160a01b0316866001600160a01b0316108015610b8857506401000276a36001600160a01b038716115b610bbf576040805162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015290519081900360640190fd5b6004805460ff60f01b19169055604080516101608101909152600090808a610bf25760048460a0015160ff16901c610c05565b60108460a0015160ff1681610c0357fe5b065b60ff1681526009546001600160801b03166020820152604001610c2661308b565b63ffffffff168152602001600060060b815260200160006001600160a01b0316815260200160001515815260200160006001600160c01b03168152602001600260149054906101000a900462ffffff1662ffffff168152602001600260179054906101000a900460020b60020b8152602001600160009054906101000a90046001600160a01b03166001600160a01b03168152602001600260009054906101000a90046001600160a01b03166001600160a01b031681525090506000808913905060006040518060e001604052808b81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018c610d2e57600754610d32565b6006545b815260200160006001600160801b0316815260200184602001516001600160801b031681525090505b805115801590610d815750886001600160a01b031681604001516001600160a01b031614155b1561114257610d8e615d33565b60408201516001600160a01b031681526060820151610100850151610db691600b918f61308f565b15156040830152600290810b810b60208301819052620d89e719910b1215610de757620d89e7196020820152610e06565b6020810151620d89e860029190910b1315610e0657620d89e860208201525b610e1381602001516131d1565b6001600160a01b031660608201526040820151610e88908d610e4d578b6001600160a01b031683606001516001600160a01b031611610e67565b8b6001600160a01b031683606001516001600160a01b0316105b610e75578260600151610e77565b8b5b60c0850151855160e0890151613503565b60c085015260a084015260808301526001600160a01b031660408301528215610eea57610ebe8160c001518260800151016136f5565b825103825260a0810151610ee090610ed5906136f5565b60208401519061370b565b6020830152610f25565b610ef78160a001516136f5565b825101825260c08101516080820151610f1f91610f1491016136f5565b602084015190613727565b60208301525b835160ff1615610f6b576000846000015160ff168260c0015181610f4557fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610faa57610f9e8160c00151600160801b8460c001516001600160801b031661373d565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415611101578060400151156110d8578360a0015161105c57604080850151602080880151928801519087015160055460608a015161102c95600d9594600094919390926001600160901b0382169163ffffffff600160901b909104811691906137ed16565b6001600160c01b031660c08701526001600160a01b03166080860152600690810b900b6060850152600160a08501525b60006110ae82602001518e61107357600654611079565b84608001515b8f61108857856080015161108c565b6007545b608089015160608a015160408b015160c08c0151600a969594939291906139eb565b90508c156110ba576000035b6110c88360c0015182613b01565b6001600160801b031660c0840152505b8b6110e75780602001516110f0565b60018160200151035b600290810b900b606083015261113c565b80600001516001600160a01b031682604001516001600160a01b03161461113c5761112f8260400151613bb7565b600290810b900b60608301525b50610d5b565b836020015160020b816060015160020b1461122d576040808501519084015160208087015190860151600554606089015160808a015160009687966111ad96600d969295919490936001600160901b0383169263ffffffff600160901b9091048116929190613ee316565b604085015160608601516004805461ffff60c81b1916600160c81b61ffff958616021761ffff60b81b1916600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b03909116179055506112529050565b6040810151600480546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031683602001516001600160801b0316146112985760c0810151600980546001600160801b0319166001600160801b039092169190911790555b8a156112e857608081015160065560a08101516001600160801b0316156112e35760a0810151600880546001600160801b031981166001600160801b03918216909301169190911790555b61132e565b608081015160075560a08101516001600160801b03161561132e5760a0810151600880546001600160801b03808216600160801b92839004821690940116029190911790555b8115158b15151461134757602081015181518b03611354565b80600001518a0381602001515b90965094508a1561147e57600085121561137b5761137b8361014001518d876000036140ee565b600061138b846101200151614251565b9050336001600160a01b031663d804d7a788888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b50505050611435846101200151614251565b61143f8289614382565b1115611478576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b50611599565b600086121561149a5761149a8361012001518d886000036140ee565b60006114aa846101400151614251565b9050336001600160a01b031663d804d7a788888c8c6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561152e57600080fd5b505af1158015611542573d6000803e3d6000fd5b50505050611554846101400151614251565b61155e8288614382565b1115611597576040805162461bcd60e51b815260206004820152600360248201526249494160e81b604482015290519081900360640190fd5b505b60408082015160c083015160608085015184518b8152602081018b90526001600160a01b03948516818701526001600160801b039093169183019190915260020b60808201529151908e169133917fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679181900360a00190a350506004805460ff60f01b1916600160f01b17905550919890975095505050505050565b6000546001600160a01b03161561164b57600080fd5b60008054336001600160a01b0319918216179091556001805482166001600160a01b0387811691909117909155600280549092169085161762ffffff60a01b1916600160a01b62ffffff85811691909102919091177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b84840b92909216919091021790556116de81614392565b600380546001600160801b0319166001600160801b039290921691909117905550505050565b6009546001600160801b031681565b6008546001600160801b0380821691600160801b90041682565b600454600160f01b900460ff16611771576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916815560005460408051638da5cb5b60e01b815290516001600160a01b0390921692638da5cb5b928282019260209290829003018186803b1580156117bf57600080fd5b505afa1580156117d3573d6000803e3d6000fd5b505050506040513d60208110156117e957600080fd5b50516001600160a01b031633146117ff57600080fd5b428163ffffffff16101561181257600080fd5b60045461188690600160b81b900461ffff1661182c61308b565b600454600954600554600d949392600160a01b810460020b926001600160801b0316916001600160901b0381169163ffffffff600160901b90920482169161ffff600160c81b8304811692600160d81b90041690613ee316565b6004805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b93909216929092021790556040805180820182526001600160901b03841680825263ffffffff841660209283018190526005805471ffffffffffffffffffffffffffffffffffff191683177fffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffff16600160901b830217905583519182529181019190915281517e8866b45af6018e497020f8d16e58c1be320850f245ebdf9d304666bee15e35929181900390910190a150506004805460ff60f01b1916600160f01b179055565b600d8161ffff811061198357600080fd5b60020201805460019091015463ffffffff82169250640100000000820460060b91600160581b81046001600160a01b031691600160f81b90910460ff16906001600160c01b031685565b600454600160f01b900460ff16611a11576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b191690819055600160d81b900461ffff166000611a39600d83856143fc565b6004805461ffff808416600160d81b810261ffff60d81b1990931692909217909255919250831614611aa6576040805161ffff80851682528316602082015281517fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a929181900390910190a15b50506004805460ff60f01b1916600160f01b17905550565b6004546001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b8204169060ff600160e81b8204811691600160f01b90041687565b6004546000908190600160f01b900460ff16611b57576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b191690556001600160801b038516611b7757600080fd5b600080611bc560405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b8152602001611bbb8a6001600160801b03166144a2565b600f0b90526144b3565b6001546002549297509095508694508593506000925082916001600160a01b0391821691168515611bfc57611bf982614251565b93505b8615611c0e57611c0b81614251565b92505b336001600160a01b0316631507a8f489898d8d6040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050506000881115611cfc57611cba82614251565b611cc4858a614382565b1115611cfc576040805162461bcd60e51b815260206004820152600260248201526104d360f41b604482015290519081900360640190fd5b8615611d4d57611d0b81614251565b611d158489614382565b1115611d4d576040805162461bcd60e51b81526020600482015260026024820152614d3160f01b604482015290519081900360640190fd5b8b60020b8d60020b8f6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338f8d8d60405180856001600160a01b03168152602001846001600160801b0316815260200183815260200182815260200194505050505060405180910390a450506004805460ff60f01b1916600160f01b17905550939a92995091975050505050505050565b60075481565b600454600160f01b900460ff16611e31576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b191690556009546001600160801b031680611e80576040805162461bcd60e51b81526020600482015260016024820152601360fa1b604482015290519081900360640190fd5b6040805160a0810182526001546001600160a01b0390811682526002549081166020830152600160a01b900462ffffff16918101829052600060608201819052608082015290611ed5908790620f424061470a565b60608201526040810151611ef390869062ffffff16620f424061470a565b60808201528051600090611f0690614251565b90506000611f178360200151614251565b90508715611f2c578251611f2c908a8a6140ee565b8615611f4157611f4183602001518a896140ee565b336001600160a01b0316630659efa68460600151856080015189896040518563ffffffff1660e01b815260040180858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015611fcb57600080fd5b505af1158015611fdf573d6000803e3d6000fd5b505050506000611ff28460000151614251565b905060006120038560200151614251565b90508161201d86606001518661438290919063ffffffff16565b1115612055576040805162461bcd60e51b8152602060048201526002602482015261046360f41b604482015290519081900360640190fd5b8061206d86608001518561438290919063ffffffff16565b11156120a5576040805162461bcd60e51b8152602060048201526002602482015261463160f01b604482015290519081900360640190fd5b838203838203811561213457600454600160e81b9004600f16600081156120d8578160ff1684816120d257fe5b046120db565b60005b90506001600160801b0381161561210e57600880546001600160801b038082168401166001600160801b03199091161790555b612128818503600160801b8c6001600160801b031661373d565b60068054909101905550505b80156121bf5760048054600160e81b9004901c600f1660008115612164578160ff16838161215e57fe5b04612167565b60005b90506001600160801b0381161561219957600880546001600160801b03600160801b8083048216850182160291161790555b6121b3818403600160801b8c6001600160801b031661373d565b60078054909101905550505b604080518d8152602081018d90528082018490526060810183905290516001600160a01b038f169133917fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6339181900360800190a350506004805460ff60f01b1916600160f01b1790555050505050505050505050565b6004546000908190600160f01b900460ff1661227e576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b19169055600061229a600c338989614744565b60038101549091506001600160801b03908116908616116122bb57846122ca565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b9091048116908516116122f25783612308565b6003810154600160801b90046001600160801b03165b91506001600160801b0383161561235a576003810180546001600160801b031981166001600160801b0391821686900382161790915560015461235a916001600160a01b03909116908a9086166140ee565b6001600160801b038216156123ad576003810180546001600160801b03600160801b8083048216869003821602918116919091179091556002546123ad916001600160a01b03909116908a9085166140ee565b604080516001600160a01b038a1681526001600160801b0380861660208301528416818301529051600288810b92908a900b9133917f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c0919081900360600190a4506004805460ff60f01b1916600160f01b17905590969095509350505050565b600c6020526000908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b600b6020526000908152604090205481565b6003546001600160801b031681565b600454600160f01b900460ff166124cf576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916815560005460408051638da5cb5b60e01b815290516001600160a01b0390921692638da5cb5b928282019260209290829003018186803b15801561251d57600080fd5b505afa158015612531573d6000803e3d6000fd5b505050506040513d602081101561254757600080fd5b50516001600160a01b0316331461255d57600080fd5b60ff82161580612580575060048260ff16101580156125805750600a8260ff1611155b80156125aa575060ff811615806125aa575060048160ff16101580156125aa5750600a8160ff1611155b6125b357600080fd5b60048054610ff083831b16840160ff908116600160e81b9081027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84161784556040805191909304600f81811683529481901c909416602082015285821681840152848216606082015291519216917f973d8d92bb299f4af6ce49b52a8adb85ae46b9f214c4c4fc06ac77401237b1339181900360800190a150506004805460ff60f01b1916600160f01b17905550565b6004546000908190600160f01b900460ff166126ad576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916815560005460408051638da5cb5b60e01b815290516001600160a01b0390921692638da5cb5b928282019260209290829003018186803b1580156126fb57600080fd5b505afa15801561270f573d6000803e3d6000fd5b505050506040513d602081101561272557600080fd5b50516001600160a01b0316331461273b57600080fd5b6008546001600160801b03908116908516116127575783612764565b6008546001600160801b03165b6008549092506001600160801b03600160801b90910481169084161161278a578261279e565b600854600160801b90046001600160801b03165b90506001600160801b0382161561280c576008546001600160801b03838116911614156127cd57600019909101905b600880546001600160801b031981166001600160801b0391821685900382161790915560015461280c916001600160a01b0390911690879085166140ee565b6001600160801b0381161561287f576008546001600160801b03828116600160801b90920416141561283d57600019015b600880546001600160801b03600160801b80830482168590038216029181169190911790915560025461287f916001600160a01b0390911690879084166140ee565b604080516001600160801b0380851682528316602082015281516001600160a01b0388169233927f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b151929081900390910190a36004805460ff60f01b1916600160f01b1790559094909350915050565b60608060606129906128fe61308b565b86868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600454600954600554600d96959450600160a01b830460020b935061ffff600160b81b84048116936001600160801b03909316926001600160901b0383169263ffffffff600160901b909104811692600160c81b909204909116906147a816565b9250925092509250925092565b6005546001600160901b03811690600160901b900463ffffffff1682565b6004546000908190600160f01b900460ff16612a04576040805162461bcd60e51b81526020600482015260036024820152624c4f4b60e81b604482015290519081900360640190fd5b6004805460ff60f01b1916905560408051608081018252338152600287810b602083015286900b9181019190915260009081908190612a609060608101612a536001600160801b038a166144a2565b600003600f0b90526144b3565b9250925092508160000394508060000393506000851180612a815750600084115b15612ac0576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b604080516001600160801b0388168152602081018790528082018690529051600289810b92908b900b9133917f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c919081900360600190a450506004805460ff60f01b1916600160f01b179055509094909350915050565b600080600080612b478686614965565b612b4f615d6f565b612b57615d6f565b600288810b810b6000908152600a602090815260408083208b850b90940b8352918290206003840154600485015460ff600160f81b8304161515608089018190526001600160c01b03909116606089015263ffffffff600160d81b830416948801949094526001600160a01b0367010000000000000082041692870192909252600691820b820b90910b855290612bed57600080fd5b6003810154600482015460ff600160f81b8304161515608086018190526001600160c01b03909116606086015263ffffffff600160d81b83041660408601526001600160a01b036701000000000000008304166020860152600691820b820b90910b8452612c5a57600080fd5b50506040805160e0810182526004546001600160a01b0381168252600160a01b8104600290810b810b810b6020840181905261ffff600160b81b8404811695850195909552600160c81b830485166060850152600160d81b8304909416608084015260ff600160e81b8304811660a0850152600160f01b909204909116151560c083015290918a820b910b1215612d275781600001518360000151038260200151846020015103836040015185604001510384606001518660600151039650965096509650505050612e20565b8760020b816020015160020b1215612de8576000612d4361308b565b60208301516040840151600954600554606087015194955060009485948594612d9a94600d948a94889493926001600160801b0316916001600160901b0381169163ffffffff600160901b9092048216916137ed16565b92509250925085600001518760000151840303866020015188602001518403038760400151896040015187030388606001518a606001518503039a509a509a509a5050505050505050612e20565b826000015182600001510383602001518360200151038460400151846040015103856060015185606001510396509650965096505050505b92959194509250565b6000546001600160a01b031681565b60028054600160b81b9004900b81565b6002546001600160a01b031681565b600254600160a01b900462ffffff1681565b60065481565b600a60205260009081526040902080546001820154600283015460038401546004909401546001600160801b03841694600160801b909404600f0b93600681900b9167010000000000000082046001600160a01b031691600160d81b810463ffffffff1691600160f81b90910460ff16906001600160c01b031689565b6004546001600160a01b031615612f2f576040805162461bcd60e51b8152602060048201526002602482015261414960f01b604482015290519081900360640190fd5b6000612f3a82613bb7565b9050600080612f52612f4a61308b565b600d90614a2e565b6040805160e0810182526001600160a01b038816808252600288810b6020808501829052600085870181905261ffff898116606088018190529089166080880181905260a0880192909252600160c09097019690965260048054600160f01b6001600160a01b0319909116871762ffffff60a01b1916600160a01b62ffffff9787900b9790971696909602959095177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9097029690961761ffff60d81b1916600160d81b909102177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1692909217909355835191825281019190915281519395509193507f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c9592918290030190a150505050565b4290565b60008060008460020b8660020b816130a357fe5b05905060008660020b1280156130ca57508460020b8660020b816130c357fe5b0760020b15155b156130d457600019015b8315613149576000806130e683614a91565b600182810b810b600090815260208d9052604090205460ff83169190911b8001600019019081168015159750929450909250908561312b57888360ff1686030261313e565b8861313582614aa3565b840360ff168603025b9650505050506131c7565b60008061315883600101614a91565b91509150600060018260ff166001901b031990506000818b60008660010b60010b81526020019081526020016000205416905080600014159550856131aa57888360ff0360ff168660010101026131c0565b88836131b583614b43565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b126131e8578260020b6131f0565b8260020b6000035b9050620d89e881111561322e576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661324257600160801b613254565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613288576ffff97272373d413259a46990580e213a0260801c5b60048216156132a7576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156132c6576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156132e5576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613304576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613323576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613342576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613362576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613382576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156133a2576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156133c2576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156133e2576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613402576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613422576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613442576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613463576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613483576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156134a2576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156134bf576b048a170391f7dc42444e8fa20260801c5b60008460020b13156134da5780600019816134d657fe5b0490505b6401000000008106156134ee5760016134f1565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a16101581871280159061358857600061353c8989620f42400362ffffff16620f424061373d565b905082613555576135508c8c8c6001614c2d565b613562565b6135628b8d8c6001614ca8565b9550858110613573578a9650613582565b61357f8c8b8386614d65565b96505b506135d2565b8161359f5761359a8b8b8b6000614ca8565b6135ac565b6135ac8a8c8b6000614c2d565b93508388600003106135c0578995506135d2565b6135cf8b8a8a60000385614db1565b95505b6001600160a01b038a8116908716148215613635578080156135f15750815b61360757613602878d8c6001614ca8565b613609565b855b9550808015613616575081155b61362c57613627878d8c6000614c2d565b61362e565b845b945061367f565b80801561363f5750815b613655576136508c888c6001614c2d565b613657565b855b9550808015613664575081155b61367a576136758c888c6000614ca8565b61367c565b845b94505b8115801561368f57508860000385115b1561369b578860000394505b8180156136ba57508a6001600160a01b0316876001600160a01b031614155b156136c95785890393506136e6565b6136e3868962ffffff168a620f42400362ffffff1661470a565b93505b50505095509550955095915050565b6000600160ff1b821061370757600080fd5b5090565b8082038281131560008312151461372157600080fd5b92915050565b8181018281121560008312151461372157600080fd5b6000808060001985870986860292508281109083900303905080613773576000841161376857600080fd5b5082900490506137e6565b80841161377f57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6000808063ffffffff8a166138b95760008c8961ffff1661ffff811061380f57fe5b6040805160a08101825260029290920292909201805463ffffffff8082168085526401000000008304600690810b810b900b6020860152600160581b83046001600160a01b031695850195909552600160f81b90910460ff16151560608401526001909101546001600160c01b031660808301529092508d161461389e5761389b818d8c8b8b8b614dfd565b90505b806020015181604001518260800151935093509350506139dc565b898b036000806138d08f8f858f8f8f8f8f8f614f47565b91509150816000015163ffffffff168363ffffffff161415613909578160200151826040015183608001519550955095505050506139dc565b805163ffffffff84811691161415613938578060200151816040015182608001519550955095505050506139dc565b8151815160208085015190840151918390039286039163ffffffff80841692908516910360060b8161396657fe5b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b0316028161399857fe5b048560400151018263ffffffff168463ffffffff1687608001518760800151036001600160c01b0316816139c857fe5b040286608001510197509750975050505050505b99509950999650505050505050565b600296870b870b60009081526020989098526040909720600181018054909603909555948401805490930390925560038301805463ffffffff600160d81b6001600160a01b036701000000000000008085048216909603169094027fffffffffff0000000000000000000000000000000000000000ffffffffffffff90921691909117600681810b90950390940b66ffffffffffffff1666ffffffffffffff19909416939093178281048416909503909216027fff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff909316929092179091556004810180546001600160c01b038082169094039093166001600160c01b03199093169290921790915554600160801b9004600f0b90565b60008082600f0b1215613b6657826001600160801b03168260000384039150816001600160801b031610613b61576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b613721565b826001600160801b03168284019150816001600160801b03161015613721576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590613bf3575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b613c28576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110613cc957607f810383901c9150613cd3565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613ed457886001600160a01b0316613eb8826131d1565b6001600160a01b03161115613ecd5781613ecf565b805b613ed6565b815b9998505050505050505050565b60008060008b8b61ffff1661ffff8110613ef957fe5b6040805160a08101825260029290920292909201805463ffffffff8082168085526401000000008304600690810b810b900b6020860152600160581b83046001600160a01b031695850195909552600160f81b90910460ff16151560608401526001909101546001600160c01b031660808301529092508b161415613f84578a8592509250506140e0565b8461ffff168461ffff16118015613fa557506001850361ffff168b61ffff16145b15613fb257839150613fb6565b8491505b8161ffff168b60010161ffff1681613fca57fe5b069250613fdb818b8b8b8b8b614dfd565b8c8461ffff1661ffff8110613fec57fe5b825160029190910291909101805460208401516040850151606086015163ffffffff1990931663ffffffff909516949094176affffffffffffff00000000191664010000000066ffffffffffffff60069390930b9290921691909102177fff0000000000000000000000000000000000000000ffffffffffffffffffffff16600160581b6001600160a01b0390941693909302929092177effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b92151592909202919091178155608090910151600190910180546001600160c01b0319166001600160c01b03909216919091179055505b995099975050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b1781529251825160009485949389169392918291908083835b6020831061417f5780518252601f199092019160209182019101614160565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146141e1576040519150601f19603f3d011682016040523d82523d6000602084013e6141e6565b606091505b5091509150818015614214575080511580614214575080806020019051602081101561421157600080fd5b50515b61424a576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b5050505050565b604080513060248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166370a0823160e01b17815291518151600093849384936001600160a01b03881693919290918291908083835b602083106142df5780518252601f1990920191602091820191016142c0565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461433f576040519150601f19603f3d011682016040523d82523d6000602084013e614344565b606091505b509150915081801561435857506020815110155b61436157600080fd5b80806020019051602081101561437657600080fd5b5051925050505b919050565b8082018281101561372157600080fd5b60008082600281900b620d89e719816143a757fe5b05029050600083600281900b620d89e8816143be57fe5b0502905060008460020b83830360020b816143d557fe5b0560010190508062ffffff166001600160801b038016816143f257fe5b0495945050505050565b6000808361ffff161161443a576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b8261ffff168261ffff16116144505750816137e6565b825b8261ffff168161ffff161015614499576001858261ffff1661ffff811061447557fe5b60020201805463ffffffff191663ffffffff92909216919091179055600101614452565b50909392505050565b80600f81900b811461437d57600080fd5b60008060006144ca84602001518560400151614965565b6040805160e0810182526004546001600160a01b0381168252600160a01b8104600290810b810b900b602080840182905261ffff600160b81b8404811685870152600160c81b84048116606080870191909152600160d81b8504909116608086015260ff600160e81b8504811660a0870152600160f01b909404909316151560c08501528851908901519489015192890151939461456e949193909290919061518e565b93508460600151600f0b60001461470257846020015160020b816020015160020b12156145c3576145bc6145a586602001516131d1565b6145b287604001516131d1565b8760600151615311565b9250614702565b846040015160020b816020015160020b12156146d85760095460408201516001600160801b0390911690614634906145f961308b565b602085015160055460608701516080880151600d9594939288926001600160901b0382169263ffffffff600160901b909304831692613ee316565b6004805461ffff60c81b1916600160c81b61ffff938416021761ffff60b81b1916600160b81b939092169290920217905581516040870151614684919061467a906131d1565b8860600151615311565b93506146a261469687602001516131d1565b83516060890151615355565b92506146b2818760600151613b01565b600980546001600160801b0319166001600160801b039290921691909117905550614702565b6146ff6146e886602001516131d1565b6146f587604001516131d1565b8760600151615355565b91505b509193909250565b600061471784848461373d565b90506000828061472357fe5b84860911156137e657600019811061473a57600080fd5b6001019392505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a90930181528251928201929092206000908152929052902090565b606080606060008461ffff16116147ea576040805162461bcd60e51b81526020600482015260016024820152604960f81b604482015290519081900360640190fd5b895167ffffffffffffffff8111801561480257600080fd5b5060405190808252806020026020018201604052801561482c578160200160208202803683370190505b509250895167ffffffffffffffff8111801561484757600080fd5b50604051908082528060200260200182016040528015614871578160200160208202803683370190505b509150895167ffffffffffffffff8111801561488c57600080fd5b506040519080825280602002602001820160405280156148b6578160200160208202803683370190505b50905060005b8a51811015614955576148e98d8d8d84815181106148d657fe5b60200260200101518d8d8d8d8d8d6137ed565b8684815181106148f557fe5b6020026020010186858151811061490857fe5b6020026020010186868151811061491b57fe5b6001600160c01b03909416602094850291909101909301929092526001600160a01b039092169052600691820b90910b90526001016148bc565b5099509950999650505050505050565b8060020b8260020b126149a5576040805162461bcd60e51b8152602060048201526003602482015262544c5560e81b604482015290519081900360640190fd5b620d89e719600283900b12156149e8576040805162461bcd60e51b8152602060048201526003602482015262544c4d60e81b604482015290519081900360640190fd5b620d89e8600282900b1315614a2a576040805162461bcd60e51b815260206004820152600360248201526254554d60e81b604482015290519081900360640190fd5b5050565b6040805160a08101825263ffffffff928316808252600060208301819052928201839052600160608301819052608090920192909252835463ffffffff1916909117909116600160f81b17825590810180546001600160c01b0319169055908190565b60020b600881901d9161010090910790565b6000808211614ab157600080fd5b600160801b8210614ac457608091821c91015b680100000000000000008210614adc57604091821c91015b6401000000008210614af057602091821c91015b620100008210614b0257601091821c91015b6101008210614b1357600891821c91015b60108210614b2357600491821c91015b60048210614b3357600291821c91015b6002821061437d57600101919050565b6000808211614b5157600080fd5b5060ff6001600160801b03821615614b6c57607f1901614b74565b608082901c91505b67ffffffffffffffff821615614b8d57603f1901614b95565b604082901c91505b63ffffffff821615614baa57601f1901614bb2565b602082901c91505b61ffff821615614bc557600f1901614bcd565b601082901c91505b60ff821615614bdf5760071901614be7565b600882901c91505b600f821615614bf95760031901614c01565b600482901c91505b6003821615614c135760011901614c1b565b600282901c91505b600182161561437d5760001901919050565b6000836001600160a01b0316856001600160a01b03161115614c4d579293925b81614c7a57614c75836001600160801b03168686036001600160a01b0316600160601b61373d565b614c9d565b614c9d836001600160801b03168686036001600160a01b0316600160601b61470a565b90505b949350505050565b6000836001600160a01b0316856001600160a01b03161115614cc8579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b038686038116908716614d0457600080fd5b83614d3457866001600160a01b0316614d278383896001600160a01b031661373d565b81614d2e57fe5b04614d5a565b614d5a614d4b8383896001600160a01b031661470a565b886001600160a01b0316615384565b979650505050505050565b600080856001600160a01b031611614d7c57600080fd5b6000846001600160801b031611614d9257600080fd5b81614da457614c75858585600161538f565b614c9d8585856001615470565b600080856001600160a01b031611614dc857600080fd5b6000846001600160801b031611614dde57600080fd5b81614df057614c758585856000615470565b614c9d858585600061538f565b614e05615d6f565b865186036001600160801b038516614e1e576001614e20565b845b9450600063ffffffff4211614e6b57428463ffffffff1610614e425781614e66565b886000015163ffffffff168463ffffffff161115614e635788518403614e66565b60005b614e6e565b60005b90506040518060a001604052808963ffffffff1681526020018363ffffffff168960020b028b602001510160060b8152602001876001600160801b031660808563ffffffff166001600160a01b0316901b6001600160a01b031681614ecf57fe5b048b60400151016001600160a01b03168152602001600115158152602001876001600160801b03168363ffffffff166010896001600160901b03166001600160c01b0316901b026001600160c01b031681614f2657fe5b048b60800151016001600160c01b0316815250925050509695505050505050565b614f4f615d6f565b614f57615d6f565b8a8761ffff1661ffff8110614f6857fe5b6040805160a08101825260029290920292909201805463ffffffff81168084526401000000008204600690810b810b900b6020850152600160581b82046001600160a01b031694840194909452600160f81b900460ff1615156060830152600101546001600160c01b031660808201529250614fe6908b908b615565565b15615020578863ffffffff16826000015163ffffffff161415615008576140e0565b81615017838b8b8a8a8a614dfd565b915091506140e0565b8a8361ffff168860010161ffff168161503557fe5b0661ffff1661ffff811061504557fe5b6040805160a08101825260029290920292909201805463ffffffff811683526401000000008104600690810b810b900b6020840152600160581b81046001600160a01b031693830193909352600160f81b90920460ff161515606082018190526001909201546001600160c01b031660808201529250615129576040805160a0810182528c5463ffffffff811682526401000000008104600690810b810b900b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015260018c01546001600160c01b0316608082015291505b6151388a83600001518b615565565b61516f576040805162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015290519081900360640190fd5b61517c8b8b8b8a87615628565b91509150995099975050505050505050565b600061519d600c878787614744565b60065460075491925090600080600f87900b156152b15760006151be61308b565b6004546009546005549293506000928392839261522992600d9288928692600160a01b830460020b9261ffff600160b81b82048116936001600160801b0316926001600160901b0381169263ffffffff600160901b909204821692600160c81b90910416906137ed16565b60035492955090935091506001600160801b0316615253600a8f8d8f8d8d898b8d60008b8d6157fd565b965061526b600a8e8d8f8d8d898b8d60018b8d6157fd565b60028054919750600160b81b909104900b8715615298576152988f82600b615a359092919063ffffffff16565b86156152aa576152aa600b8f83615a35565b5050505050505b6000806152c3600a8c8c8b8a8a615a9b565b90925090506152d4878a8484615b47565b600089600f0b12156153025783156152f1576152f1600a8c615cdc565b821561530257615302600a8b615cdc565b50505050505095945050505050565b60008082600f0b126153375761533261532d8585856001614ca8565b6136f5565b614ca0565b61534a61532d8585856000036000614ca8565b600003949350505050565b60008082600f0b126153715761533261532d8585856001614c2d565b61534a61532d8585856000036000614c2d565b808204910615150190565b600081156154025760006001600160a01b038411156153c5576153c084600160601b876001600160801b031661373d565b6153dd565b6001600160801b038516606085901b816153db57fe5b045b90506153fa6153f56001600160a01b03881683614382565b615d1d565b915050614ca0565b60006001600160a01b038411156154305761542b84600160601b876001600160801b031661470a565b615447565b615447606085901b6001600160801b038716615384565b905080866001600160a01b03161161545e57600080fd5b6001600160a01b038616039050614ca0565b60008261547e575083614ca0565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b16821561551e576001600160a01b038616848102908582816154be57fe5b0414156154ef578181018281106154ed576154e383896001600160a01b03168361470a565b9350505050614ca0565b505b61551582615510878a6001600160a01b0316868161550957fe5b0490614382565b615384565b92505050614ca0565b6001600160a01b0386168481029085828161553557fe5b0414801561554257508082115b61554b57600080fd5b8082036154e36153f5846001600160a01b038b168461470a565b60008363ffffffff168363ffffffff161115801561558f57508363ffffffff168263ffffffff1611155b156155ab578163ffffffff168363ffffffff16111590506137e6565b60008463ffffffff168463ffffffff16116155d3578363ffffffff16640100000000016155db565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff161161560c578363ffffffff1664010000000001615614565b8363ffffffff165b64ffffffffff169091111595945050505050565b615630615d6f565b615638615d6f565b60008361ffff168560010161ffff168161564e57fe5b0661ffff169050600060018561ffff16830103905060005b506002818301048961ffff8716828161567b57fe5b0661ffff811061568757fe5b6040805160a08101825260029290920292909201805463ffffffff811683526401000000008104600690810b810b900b6020840152600160581b81046001600160a01b031693830193909352600160f81b90920460ff161515606082018190526001909201546001600160c01b03166080820152955061570c57806001019250615666565b898661ffff16826001018161571d57fe5b0661ffff811061572957fe5b6040805160a08101825260029290920292909201805463ffffffff811683526401000000008104600690810b810b900b6020840152600160581b81046001600160a01b031693830193909352600160f81b90920460ff16151560608201526001909101546001600160c01b0316608082015285519094506000906157af908b908b615565565b90508080156157c857506157c88a8a8760000151615565565b156157d357506157f0565b806157e3576001820392506157ea565b8160010193505b50615666565b5050509550959350505050565b60028b810b900b600090815260208d90526040812080546001600160801b031682615828828e613b01565b9050856001600160801b0316816001600160801b03161115615876576040805162461bcd60e51b81526020600482015260026024820152614c4f60f01b604482015290519081900360640190fd5b6001600160801b038281161590821615811415945015615981578d60020b8f60020b13615951578b83600101819055508a8360020181905550898360030160076101000a8154816001600160a01b0302191690836001600160a01b03160217905550888360030160006101000a81548166ffffffffffffff021916908360060b66ffffffffffffff1602179055508783600301601b6101000a81548163ffffffff021916908363ffffffff160217905550848360040160006101000a8154816001600160c01b0302191690836001600160c01b031602179055505b6003830180547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600160f81b1790555b82546001600160801b0319166001600160801b038216178355866159d6576159d16159cc8e600f0b8560000160109054906101000a9004600f0b600f0b61372790919063ffffffff16565b6144a2565b615a03565b615a036159cc8e600f0b8560000160109054906101000a9004600f0b600f0b61370b90919063ffffffff16565b8354600f9190910b6001600160801b03908116600160801b0291161790925550909d9c50505050505050505050505050565b8060020b8260020b81615a4457fe5b0760020b15615a5257600080fd5b600080615a6d8360020b8560020b81615a6757fe5b05614a91565b600191820b820b60009081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b80820b60009081526020899052604080822088850b850b83529082209193849391929184918291908a900b12615ae157505060018201546002830154615af4565b8360010154880391508360020154870390505b6000808b60020b8b60020b1215615b1657505060018301546002840154615b29565b84600101548a0391508460020154890390505b92909803979097039b96909503949094039850939650505050505050565b6040805160a08101825285546001600160801b0390811682526001870154602083015260028701549282019290925260038601548083166060830152600160801b900490911660808201526000600f85900b615be65781516001600160801b0316615bde576040805162461bcd60e51b815260206004820152600260248201526104e560f41b604482015290519081900360640190fd5b508051615bf5565b8151615bf29086613b01565b90505b6000615c198360200151860384600001516001600160801b0316600160801b61373d565b90506000615c3f8460400151860385600001516001600160801b0316600160801b61373d565b905086600f0b600014615c665787546001600160801b0319166001600160801b0384161788555b60018801869055600288018590556001600160801b038216151580615c9457506000816001600160801b0316115b15615cd2576003880180546001600160801b031981166001600160801b039182168501821617808216600160801b9182900483168501909216021790555b5050505050505050565b600290810b810b60009081526020929092526040822082815560018101839055908101829055600381019190915560040180546001600160c01b0319169055565b806001600160a01b038116811461437d57600080fd5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091529056fea264697066735822122077f216df62bac6d2389ed5ed695bbeac8d557a5f189904f27ed4a6d2818f636a64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
