{
  "_format": "hh-sol-artifact-1",
  "contractName": "LightSpeedPool",
  "sourceName": "contracts/LightSpeedPool.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "vestingId",
          "type": "uint256"
        }
      ],
      "name": "Staking",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "splitter",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "oldVestingId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldAmount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newVestingId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "leftAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "rightAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "name": "VestingSplit",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_fee",
          "type": "uint256"
        }
      ],
      "name": "calculateFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rest",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakedAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "precisionAbsolute",
          "type": "uint256"
        }
      ],
      "name": "calculateSpeedPure",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vestingAmountStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "vestingAmountEnd",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "stakingAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "timePassed",
          "type": "uint256"
        }
      ],
      "name": "calculateSpeedUp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "vestingStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "vestingEnd",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "vestingAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "calculateUnvestAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeSplit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getFeeTransfer",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getStakingCliff",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getStakingKoef",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getVestingRecord",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "start",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "end",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialStart",
              "type": "uint256"
            }
          ],
          "internalType": "struct MarsbaseVesting.VestingRecord",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "getVestingsByOwner",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "isStaked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timePassed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "safeLerp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newFee",
          "type": "uint256"
        }
      ],
      "name": "setFeeSplit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newFee",
          "type": "uint256"
        }
      ],
      "name": "setFeeTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newStakingCliff",
          "type": "uint256"
        }
      ],
      "name": "setStakingCliff",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newStakingKoef",
          "type": "uint256"
        }
      ],
      "name": "setStakingKoef",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "leftAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "rightAmount",
          "type": "uint256"
        }
      ],
      "name": "split",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "mbaseAmount",
          "type": "uint256"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "unstake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "unvest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "unvest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "vest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "vest",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withStakingKoef",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000600d556000600e5562278d00601055620186a06011553480156200002957600080fd5b5060405162005ac338038062005ac383398181016040528101906200004f919062000294565b806040518060400160405280601981526020017f4f5443204d617273626173652056657374656420546f6b656e000000000000008152506040518060400160405280600681526020017f764d4241534500000000000000000000000000000000000000000000000000008152508160009080519060200190620000d49291906200017a565b508060019080519060200190620000ed9291906200017a565b50505080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200032a565b8280546200018890620002f5565b90600052602060002090601f016020900481019282620001ac5760008555620001f8565b82601f10620001c757805160ff1916838001178555620001f8565b82800160010185558215620001f8579182015b82811115620001f7578251825591602001919060010190620001da565b5b5090506200020791906200020b565b5090565b5b80821115620002265760008160009055506001016200020c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200025c826200022f565b9050919050565b6200026e816200024f565b81146200027a57600080fd5b50565b6000815190506200028e8162000263565b92915050565b600060208284031215620002ad57620002ac6200022a565b5b6000620002bd848285016200027d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030e57607f821691505b602082108103620003245762000323620002c6565b5b50919050565b615789806200033a6000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80637b0472f011610146578063b7d88ae0116100c3578063caf0887d11610087578063caf0887d146107de578063cd962a061461080e578063e985e9c51461082a578063eda0be691461085a578063f3621c9014610878578063f3ac2c43146108a85761025e565b8063b7d88ae014610714578063b88d4fde14610744578063baa51f8614610760578063bbefb60114610790578063c87b56dd146107ae5761025e565b80639d7484a81161010a5780639d7484a81461065e578063a22cb4651461068e578063a462b264146106aa578063a739f61e146106c6578063a9c0a125146106f65761025e565b80637b0472f0146105a6578063880f1eb9146105c2578063893d20e8146105f257806391d525671461061057806395d89b41146106405761025e565b80632f745c59116101df5780634f6ccce7116101a35780634f6ccce714610498578063622d0be4146104c85780636352211e146104e657806363ece9431461051657806370a0823114610546578063795e65ab146105765761025e565b80632f745c59146103cf57806334e73122146103ff57806339e94f751461043057806342842e0e146104605780634cc9b9e91461047c5761025e565b80630e0ab5b9116102265780630e0ab5b91461031957806313af40351461034957806318160ddd1461036557806323b872dd146103835780632e17de781461039f5761025e565b806301ffc9a71461026357806304387c8d1461029357806306fdde03146102af578063081812fc146102cd578063095ea7b3146102fd575b600080fd5b61027d600480360381019061027891906139e7565b6108d8565b60405161028a9190613a2f565b60405180910390f35b6102ad60048036038101906102a89190613a80565b610952565b005b6102b76109ec565b6040516102c49190613b46565b60405180910390f35b6102e760048036038101906102e29190613a80565b610a7e565b6040516102f49190613ba9565b60405180910390f35b61031760048036038101906103129190613bf0565b610b03565b005b610333600480360381019061032e9190613c30565b610c1a565b6040516103409190613ca6565b60405180910390f35b610363600480360381019061035e9190613cc1565b610c58565b005b61036d610d2c565b60405161037a9190613ca6565b60405180910390f35b61039d60048036038101906103989190613cee565b610d39565b005b6103b960048036038101906103b49190613a80565b610d99565b6040516103c69190613ca6565b60405180910390f35b6103e960048036038101906103e49190613bf0565b610da0565b6040516103f69190613ca6565b60405180910390f35b61041960048036038101906104149190613d41565b610e45565b604051610427929190613d81565b60405180910390f35b61044a60048036038101906104459190613daa565b610e79565b6040516104579190613ca6565b60405180910390f35b61047a60048036038101906104759190613cee565b6111a0565b005b61049660048036038101906104919190613a80565b6111c0565b005b6104b260048036038101906104ad9190613a80565b61125a565b6040516104bf9190613ca6565b60405180910390f35b6104d06112cb565b6040516104dd9190613ca6565b60405180910390f35b61050060048036038101906104fb9190613a80565b6112d5565b60405161050d9190613ba9565b60405180910390f35b610530600480360381019061052b9190613cc1565b611386565b60405161053d9190613ecf565b60405180910390f35b610560600480360381019061055b9190613cc1565b61148f565b60405161056d9190613ca6565b60405180910390f35b610590600480360381019061058b9190613a80565b611546565b60405161059d9190613f59565b60405180910390f35b6105c060048036038101906105bb9190613d41565b6115a5565b005b6105dc60048036038101906105d79190613f74565b611744565b6040516105e99190613ca6565b60405180910390f35b6105fa611766565b6040516106079190613ba9565b60405180910390f35b61062a60048036038101906106259190613a80565b611790565b6040516106379190613ca6565b60405180910390f35b6106486119a2565b6040516106559190613b46565b60405180910390f35b61067860048036038101906106739190613f74565b611a34565b6040516106859190613ca6565b60405180910390f35b6106a860048036038101906106a39190613ff3565b611a77565b005b6106c460048036038101906106bf9190613a80565b611a8d565b005b6106e060048036038101906106db9190613c30565b611b27565b6040516106ed9190613ca6565b60405180910390f35b6106fe611b9b565b60405161070b9190613ca6565b60405180910390f35b61072e6004803603810190610729919061417b565b611ba5565b60405161073b9190613ca6565b60405180910390f35b61075e60048036038101906107599190614279565b611c06565b005b61077a60048036038101906107759190613a80565b611c68565b6040516107879190613a2f565b60405180910390f35b610798611c8a565b6040516107a59190613ca6565b60405180910390f35b6107c860048036038101906107c39190613a80565b611c94565b6040516107d59190613b46565b60405180910390f35b6107f860048036038101906107f39190613f74565b611d3b565b6040516108059190613ca6565b60405180910390f35b61082860048036038101906108239190613a80565b612156565b005b610844600480360381019061083f91906142fc565b6121f0565b6040516108519190613a2f565b60405180910390f35b610862612284565b60405161086f9190613ca6565b60405180910390f35b610892600480360381019061088d9190613f74565b61228e565b60405161089f9190613ca6565b60405180910390f35b6108c260048036038101906108bd9190613a80565b6122a5565b6040516108cf9190613ca6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094b575061094a826122df565b5b9050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990614388565b60405180910390fd5b80600e8190555050565b6060600080546109fb906143d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a27906143d7565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b5050505050905090565b6000610a89826123c1565b610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061447a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0e826112d5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b759061450c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9d61242d565b73ffffffffffffffffffffffffffffffffffffffff161480610bcc5750610bcb81610bc661242d565b6121f0565b5b610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c029061459e565b60405180910390fd5b610c158383612435565b505050565b6000808585610c2991906145ed565b905060008684610c3991906145ed565b90506000610c48828785611a34565b9050809350505050949350505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614388565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600880549050905090565b610d4a610d4461242d565b826124ee565b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614693565b60405180910390fd5b610d948383836125cc565b505050565b6000919050565b6000610dab8361148f565b8210610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390614725565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080620186a08385610e589190614745565b610e6291906147ce565b91508184610e7091906145ed565b90509250929050565b600082600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401610ed99291906147ff565b602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061483d565b1015610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906148b6565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcc919061483d565b9050610fd883826126d7565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401611037939291906148d6565b6020604051808303816000875af1158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a9190614922565b50600042905063bbf81e0081611090919061494f565b8711156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906149f1565b60405180910390fd5b63bbf81e00816110e2919061494f565b861115611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614a5d565b60405180910390fd5b6040518060a0016040528088815260200187815260200186815260200186815260200188815250600c600084815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508192505050949350505050565b6111bb83838360405180602001604052806000815250611c06565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790614388565b60405180910390fd5b8060118190555050565b6000611264610d2c565b82106112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90614aef565b60405180910390fd5b600882815481106112b9576112b8614b0f565b5b90600052602060002001549050919050565b6000601154905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490614bb0565b60405180910390fd5b80915050919050565b606060006113938361148f565b9050600081036113ef57600067ffffffffffffffff8111156113b8576113b7614038565b5b6040519080825280602002602001820160405280156113e65781602001602082028036833780820191505090505b5091505061148a565b60008167ffffffffffffffff81111561140b5761140a614038565b5b6040519080825280602002602001820160405280156114395781602001602082028036833780820191505090505b50905060005b82811015611483576114518582610da0565b82828151811061146457611463614b0f565b5b602002602001018181525050808061147b90614bd0565b91505061143f565b5080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690614c8a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61154e61394c565b600c60008381526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050919050565b6115ae82611c68565b156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614cf6565b60405180910390fd5b6115f782611790565b506116033330846125cc565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611662939291906148d6565b6020604051808303816000875af1158015611681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a59190614922565b506000429050604051806060016040528082815260200182815260200183815250600f600085815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505082823373ffffffffffffffffffffffffffffffffffffffff167fa7cce4e8ff59a515dccbee3a6382e94deb1db79bdb43cf35a51251d41ea395f060405160405180910390a4505050565b60008382846117539190614745565b61175d91906147ce565b90509392505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061179b82611c68565b6117af576117a8826128b0565b905061199d565b60004290506000601054600f6000868152602001908152602001600020600001546117da919061494f565b905042811161181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614d62565b60405180910390fd5b6000600c60008681526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050600061188c82600001518360200151846040015187610c1a565b905060008183604001516118a091906145ed565b9050600081116118bf576118b387610d99565b9550505050505061199d565b6000600f60008981526020019081526020016000206002015490506000600f60008a815260200190815260200160002060010154876118fe91906145ed565b9050600061191a866040015185611914866122a5565b85611b27565b9050600081876020015161192e91906145ed565b905080600c60008d81526020019081526020016000206001018190555088600f60008d815260200190815260200160002060010181905550888111611986576119768b610d99565b995050505050505050505061199d565b6119918b338b6129b1565b99505050505050505050505b919050565b6060600180546119b1906143d7565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd906143d7565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b5050505050905090565b6000818410611a4557829050611a70565b60008411611a565760009050611a70565b818484611a639190614745565b611a6d91906147ce565b90505b9392505050565b611a89611a8261242d565b8383612c54565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614388565b60405180910390fd5b8060108190555050565b600080611b3a86856402540be400611744565b90506000611b4e86866402540be400611744565b9050600060028284611b60919061494f565b611b6a91906147ce565b905060006402540be4008287611b809190614745565b611b8a91906147ce565b905080945050505050949350505050565b6000600e54905090565b600080825190506000805b82811015611bfb57611bdb858281518110611bce57611bcd614b0f565b5b6020026020010151611790565b82611be6919061494f565b91508080611bf390614bd0565b915050611bb0565b508092505050919050565b611c17611c1161242d565b836124ee565b611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90614693565b60405180910390fd5b611c6284848484612dc0565b50505050565b600080600f600084815260200190815260200160002060020154119050919050565b6000601054905090565b6060611c9f826123c1565b611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590614df4565b60405180910390fd5b6000611ce8612e1c565b90506000815111611d085760405180602001604052806000815250611d33565b80611d1284612e33565b604051602001611d23929190614e50565b6040516020818303038152906040525b915050919050565b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b8152600401611d8d9190613ca6565b602060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190614e89565b73ffffffffffffffffffffffffffffffffffffffff1614611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90614f02565b60405180910390fd5b6000600c60008681526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008411611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290614f6e565b60405180910390fd5b60008311611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614fda565b60405180910390fd5b8284611f0a919061494f565b816040015114611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690615046565b60405180910390fd5b600080600d541115611fc157611f6b8260400151600d54610e45565b5080915050808511611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906150b2565b60405180910390fd5b8085611fbe91906145ed565b94505b60003073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612032919061483d565b905061203e33826126d7565b6040518060a0016040528084600001518152602001846020015181526020018681526020018681526020018460000151815250600c6000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015590505085600c60008981526020019081526020016000206002018190555085600c60008981526020019081526020016000206003018190555080873373ffffffffffffffffffffffffffffffffffffffff167fcbec30f3f612eea513363bc11396c0d7d2117bc8a87f8f376ebb781562df610a86604001518a8a8860405161214194939291906150d2565b60405180910390a48093505050509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614388565b60405180910390fd5b80600d8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600d54905090565b600061229c84848433610e79565b90509392505050565b6000620186a0601154036122bb578190506122da565b620186a0601154836122cd9190614745565b6122d791906147ce565b90505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123ba57506123b982612f93565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124a8836112d5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124f9826123c1565b612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90615189565b60405180910390fd5b6000612543836112d5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125b257508373ffffffffffffffffffffffffffffffffffffffff1661259a84610a7e565b73ffffffffffffffffffffffffffffffffffffffff16145b806125c357506125c281856121f0565b5b91505092915050565b6125d7838383612ffd565b6000600e5403156126d2573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061264757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6126d257600061266f600c600084815260200190815260200160002060020154600e54610e45565b915050600081116126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac906148b6565b60405180910390fd5b80600c600084815260200190815260200160002060020181905550505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d906151f5565b60405180910390fd5b61274f816123c1565b1561278f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278690615261565b60405180910390fd5b61279b60008383613263565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127eb919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128ac60008383613375565b5050565b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016129029190613ca6565b602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129439190614e89565b73ffffffffffffffffffffffffffffffffffffffff1614612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090614f02565b60405180910390fd5b60004290506129a98333836129b1565b915050919050565b600080600c60008681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000816040015111612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a44906152cd565b60405180910390fd5b8281600001511115612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90615339565b60405180910390fd5b6000612aae82600001518360200151846040015187610c1a565b905060008111612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea906153a5565b60405180910390fd5b8160400151811115612b0757816040015190505b6000818360400151612b1991906145ed565b905060008103612b6f57600c600088815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905560048201600090555050612b6a8761337a565b612ba6565b80600c60008981526020019081526020016000206002018190555084600c6000898152602001908152602001600020600001819055505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87846040518363ffffffff1660e01b8152600401612c039291906153c5565b6020604051808303816000875af1158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190614922565b508193505050509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb99061543a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612db39190613a2f565b60405180910390a3505050565b612dcb8484846125cc565b612dd784848484613497565b612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d906154cc565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008203612e7a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f8e565b600082905060005b60008214612eac578080612e9590614bd0565b915050600a82612ea591906147ce565b9150612e82565b60008167ffffffffffffffff811115612ec857612ec7614038565b5b6040519080825280601f01601f191660200182016040528015612efa5781602001600182028036833780820191505090505b5090505b60008514612f8757600182612f1391906145ed565b9150600a85612f2291906154ec565b6030612f2e919061494f565b60f81b818381518110612f4457612f43614b0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8091906147ce565b9450612efe565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8273ffffffffffffffffffffffffffffffffffffffff1661301d826112d5565b73ffffffffffffffffffffffffffffffffffffffff1614613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a9061558f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d990615621565b60405180910390fd5b6130ed838383613263565b6130f8600082612435565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461314891906145ed565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461319f919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461325e838383613375565b505050565b61326e83838361361e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132b0576132ab81613623565b6132ef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132ee576132ed838261366c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133315761332c816137d9565b613370565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461336f5761336e82826138aa565b5b5b505050565b505050565b6000613385826112d5565b905061339381600084613263565b61339e600083612435565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133ee91906145ed565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461349381600084613375565b5050565b60006134b88473ffffffffffffffffffffffffffffffffffffffff16613929565b15613611578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134e161242d565b8786866040518563ffffffff1660e01b81526004016135039493929190615696565b6020604051808303816000875af192505050801561353f57506040513d601f19601f8201168201806040525081019061353c91906156f7565b60015b6135c1573d806000811461356f576040519150601f19603f3d011682016040523d82523d6000602084013e613574565b606091505b5060008151036135b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b0906154cc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613616565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136798461148f565b61368391906145ed565b9050600060076000848152602001908152602001600020549050818114613768576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137ed91906145ed565b905060006009600084815260200190815260200160002054905060006008838154811061381d5761381c614b0f565b5b90600052602060002001549050806008838154811061383f5761383e614b0f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061388e5761388d615724565b5b6001900381819060005260206000200160009055905550505050565b60006138b58361148f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139c48161398f565b81146139cf57600080fd5b50565b6000813590506139e1816139bb565b92915050565b6000602082840312156139fd576139fc613985565b5b6000613a0b848285016139d2565b91505092915050565b60008115159050919050565b613a2981613a14565b82525050565b6000602082019050613a446000830184613a20565b92915050565b6000819050919050565b613a5d81613a4a565b8114613a6857600080fd5b50565b600081359050613a7a81613a54565b92915050565b600060208284031215613a9657613a95613985565b5b6000613aa484828501613a6b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ae7578082015181840152602081019050613acc565b83811115613af6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b1882613aad565b613b228185613ab8565b9350613b32818560208601613ac9565b613b3b81613afc565b840191505092915050565b60006020820190508181036000830152613b608184613b0d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b9382613b68565b9050919050565b613ba381613b88565b82525050565b6000602082019050613bbe6000830184613b9a565b92915050565b613bcd81613b88565b8114613bd857600080fd5b50565b600081359050613bea81613bc4565b92915050565b60008060408385031215613c0757613c06613985565b5b6000613c1585828601613bdb565b9250506020613c2685828601613a6b565b9150509250929050565b60008060008060808587031215613c4a57613c49613985565b5b6000613c5887828801613a6b565b9450506020613c6987828801613a6b565b9350506040613c7a87828801613a6b565b9250506060613c8b87828801613a6b565b91505092959194509250565b613ca081613a4a565b82525050565b6000602082019050613cbb6000830184613c97565b92915050565b600060208284031215613cd757613cd6613985565b5b6000613ce584828501613bdb565b91505092915050565b600080600060608486031215613d0757613d06613985565b5b6000613d1586828701613bdb565b9350506020613d2686828701613bdb565b9250506040613d3786828701613a6b565b9150509250925092565b60008060408385031215613d5857613d57613985565b5b6000613d6685828601613a6b565b9250506020613d7785828601613a6b565b9150509250929050565b6000604082019050613d966000830185613c97565b613da36020830184613c97565b9392505050565b60008060008060808587031215613dc457613dc3613985565b5b6000613dd287828801613a6b565b9450506020613de387828801613a6b565b9350506040613df487828801613a6b565b9250506060613e0587828801613bdb565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e4681613a4a565b82525050565b6000613e588383613e3d565b60208301905092915050565b6000602082019050919050565b6000613e7c82613e11565b613e868185613e1c565b9350613e9183613e2d565b8060005b83811015613ec2578151613ea98882613e4c565b9750613eb483613e64565b925050600181019050613e95565b5085935050505092915050565b60006020820190508181036000830152613ee98184613e71565b905092915050565b60a082016000820151613f076000850182613e3d565b506020820151613f1a6020850182613e3d565b506040820151613f2d6040850182613e3d565b506060820151613f406060850182613e3d565b506080820151613f536080850182613e3d565b50505050565b600060a082019050613f6e6000830184613ef1565b92915050565b600080600060608486031215613f8d57613f8c613985565b5b6000613f9b86828701613a6b565b9350506020613fac86828701613a6b565b9250506040613fbd86828701613a6b565b9150509250925092565b613fd081613a14565b8114613fdb57600080fd5b50565b600081359050613fed81613fc7565b92915050565b6000806040838503121561400a57614009613985565b5b600061401885828601613bdb565b925050602061402985828601613fde565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61407082613afc565b810181811067ffffffffffffffff8211171561408f5761408e614038565b5b80604052505050565b60006140a261397b565b90506140ae8282614067565b919050565b600067ffffffffffffffff8211156140ce576140cd614038565b5b602082029050602081019050919050565b600080fd5b60006140f76140f2846140b3565b614098565b9050808382526020820190506020840283018581111561411a576141196140df565b5b835b81811015614143578061412f8882613a6b565b84526020840193505060208101905061411c565b5050509392505050565b600082601f83011261416257614161614033565b5b81356141728482602086016140e4565b91505092915050565b60006020828403121561419157614190613985565b5b600082013567ffffffffffffffff8111156141af576141ae61398a565b5b6141bb8482850161414d565b91505092915050565b600080fd5b600067ffffffffffffffff8211156141e4576141e3614038565b5b6141ed82613afc565b9050602081019050919050565b82818337600083830152505050565b600061421c614217846141c9565b614098565b905082815260208101848484011115614238576142376141c4565b5b6142438482856141fa565b509392505050565b600082601f8301126142605761425f614033565b5b8135614270848260208601614209565b91505092915050565b6000806000806080858703121561429357614292613985565b5b60006142a187828801613bdb565b94505060206142b287828801613bdb565b93505060406142c387828801613a6b565b925050606085013567ffffffffffffffff8111156142e4576142e361398a565b5b6142f08782880161424b565b91505092959194509250565b6000806040838503121561431357614312613985565b5b600061432185828601613bdb565b925050602061433285828601613bdb565b9150509250929050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000614372600a83613ab8565b915061437d8261433c565b602082019050919050565b600060208201905081810360008301526143a181614365565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ef57607f821691505b602082108103614402576144016143a8565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614464602c83613ab8565b915061446f82614408565b604082019050919050565b6000602082019050818103600083015261449381614457565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f6602183613ab8565b91506145018261449a565b604082019050919050565b60006020820190508181036000830152614525816144e9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614588603883613ab8565b91506145938261452c565b604082019050919050565b600060208201905081810360008301526145b78161457b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145f882613a4a565b915061460383613a4a565b925082821015614616576146156145be565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061467d603183613ab8565b915061468882614621565b604082019050919050565b600060208201905081810360008301526146ac81614670565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061470f602b83613ab8565b915061471a826146b3565b604082019050919050565b6000602082019050818103600083015261473e81614702565b9050919050565b600061475082613a4a565b915061475b83613a4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614794576147936145be565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147d982613a4a565b91506147e483613a4a565b9250826147f4576147f361479f565b5b828204905092915050565b60006040820190506148146000830185613b9a565b6148216020830184613b9a565b9392505050565b60008151905061483781613a54565b92915050565b60006020828403121561485357614852613985565b5b600061486184828501614828565b91505092915050565b7f6e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b60006148a0601183613ab8565b91506148ab8261486a565b602082019050919050565b600060208201905081810360008301526148cf81614893565b9050919050565b60006060820190506148eb6000830186613b9a565b6148f86020830185613b9a565b6149056040830184613c97565b949350505050565b60008151905061491c81613fc7565b92915050565b60006020828403121561493857614937613985565b5b60006149468482850161490d565b91505092915050565b600061495a82613a4a565b915061496583613a4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561499a576149996145be565b5b828201905092915050565b7f7374617274206461746520697320746f6f206661720000000000000000000000600082015250565b60006149db601583613ab8565b91506149e6826149a5565b602082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f656e64206461746520697320746f6f2066617200000000000000000000000000600082015250565b6000614a47601383613ab8565b9150614a5282614a11565b602082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614ad9602c83613ab8565b9150614ae482614a7d565b604082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614b9a602983613ab8565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b6000614bdb82613a4a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c0d57614c0c6145be565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614c74602a83613ab8565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f546f6b656e20616c7265616479207374616b6564000000000000000000000000600082015250565b6000614ce0601483613ab8565b9150614ceb82614caa565b602082019050919050565b60006020820190508181036000830152614d0f81614cd3565b9050919050565b7f7374616b696e6720636c69666600000000000000000000000000000000000000600082015250565b6000614d4c600d83613ab8565b9150614d5782614d16565b602082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614dde602f83613ab8565b9150614de982614d82565b604082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b600081905092915050565b6000614e2a82613aad565b614e348185614e14565b9350614e44818560208601613ac9565b80840191505092915050565b6000614e5c8285614e1f565b9150614e688284614e1f565b91508190509392505050565b600081519050614e8381613bc4565b92915050565b600060208284031215614e9f57614e9e613985565b5b6000614ead84828501614e74565b91505092915050565b7f546f6b656e206973206e6f74206f776e656420627920796f7500000000000000600082015250565b6000614eec601983613ab8565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f4c65667420616d6f756e74206d75737420626520677420300000000000000000600082015250565b6000614f58601883613ab8565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f526967687420616d6f756e74206d757374206265206774203000000000000000600082015250565b6000614fc4601983613ab8565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f416d6f756e747320646f206e6f74206164642075700000000000000000000000600082015250565b6000615030601583613ab8565b915061503b82614ffa565b602082019050919050565b6000602082019050818103600083015261505f81615023565b9050919050565b7f4c65667420616d6f756e74206d75737420626520677420666565000000000000600082015250565b600061509c601a83613ab8565b91506150a782615066565b602082019050919050565b600060208201905081810360008301526150cb8161508f565b9050919050565b60006080820190506150e76000830187613c97565b6150f46020830186613c97565b6151016040830185613c97565b61510e6060830184613c97565b95945050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615173602c83613ab8565b915061517e82615117565b604082019050919050565b600060208201905081810360008301526151a281615166565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006151df602083613ab8565b91506151ea826151a9565b602082019050919050565b6000602082019050818103600083015261520e816151d2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061524b601c83613ab8565b915061525682615215565b602082019050919050565b6000602082019050818103600083015261527a8161523e565b9050919050565b7f546f6b656e206973206e6f742076657374656400000000000000000000000000600082015250565b60006152b7601383613ab8565b91506152c282615281565b602082019050919050565b600060208201905081810360008301526152e6816152aa565b9050919050565b7f56657374696e6720686173206e6f742073746172746564000000000000000000600082015250565b6000615323601783613ab8565b915061532e826152ed565b602082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b7f4e6f20746f6b656e7320746f20756e7665737400000000000000000000000000600082015250565b600061538f601383613ab8565b915061539a82615359565b602082019050919050565b600060208201905081810360008301526153be81615382565b9050919050565b60006040820190506153da6000830185613b9a565b6153e76020830184613c97565b9392505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615424601983613ab8565b915061542f826153ee565b602082019050919050565b6000602082019050818103600083015261545381615417565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006154b6603283613ab8565b91506154c18261545a565b604082019050919050565b600060208201905081810360008301526154e5816154a9565b9050919050565b60006154f782613a4a565b915061550283613a4a565b9250826155125761551161479f565b5b828206905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000615579602583613ab8565b91506155848261551d565b604082019050919050565b600060208201905081810360008301526155a88161556c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061560b602483613ab8565b9150615616826155af565b604082019050919050565b6000602082019050818103600083015261563a816155fe565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061566882615641565b615672818561564c565b9350615682818560208601613ac9565b61568b81613afc565b840191505092915050565b60006080820190506156ab6000830187613b9a565b6156b86020830186613b9a565b6156c56040830185613c97565b81810360608301526156d7818461565d565b905095945050505050565b6000815190506156f1816139bb565b92915050565b60006020828403121561570d5761570c613985565b5b600061571b848285016156e2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212208bcdd80aefa7ea6f5883cf49ca06bfee1f3502927c535aeb3f0dfddab1d318af64736f6c634300080d0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80637b0472f011610146578063b7d88ae0116100c3578063caf0887d11610087578063caf0887d146107de578063cd962a061461080e578063e985e9c51461082a578063eda0be691461085a578063f3621c9014610878578063f3ac2c43146108a85761025e565b8063b7d88ae014610714578063b88d4fde14610744578063baa51f8614610760578063bbefb60114610790578063c87b56dd146107ae5761025e565b80639d7484a81161010a5780639d7484a81461065e578063a22cb4651461068e578063a462b264146106aa578063a739f61e146106c6578063a9c0a125146106f65761025e565b80637b0472f0146105a6578063880f1eb9146105c2578063893d20e8146105f257806391d525671461061057806395d89b41146106405761025e565b80632f745c59116101df5780634f6ccce7116101a35780634f6ccce714610498578063622d0be4146104c85780636352211e146104e657806363ece9431461051657806370a0823114610546578063795e65ab146105765761025e565b80632f745c59146103cf57806334e73122146103ff57806339e94f751461043057806342842e0e146104605780634cc9b9e91461047c5761025e565b80630e0ab5b9116102265780630e0ab5b91461031957806313af40351461034957806318160ddd1461036557806323b872dd146103835780632e17de781461039f5761025e565b806301ffc9a71461026357806304387c8d1461029357806306fdde03146102af578063081812fc146102cd578063095ea7b3146102fd575b600080fd5b61027d600480360381019061027891906139e7565b6108d8565b60405161028a9190613a2f565b60405180910390f35b6102ad60048036038101906102a89190613a80565b610952565b005b6102b76109ec565b6040516102c49190613b46565b60405180910390f35b6102e760048036038101906102e29190613a80565b610a7e565b6040516102f49190613ba9565b60405180910390f35b61031760048036038101906103129190613bf0565b610b03565b005b610333600480360381019061032e9190613c30565b610c1a565b6040516103409190613ca6565b60405180910390f35b610363600480360381019061035e9190613cc1565b610c58565b005b61036d610d2c565b60405161037a9190613ca6565b60405180910390f35b61039d60048036038101906103989190613cee565b610d39565b005b6103b960048036038101906103b49190613a80565b610d99565b6040516103c69190613ca6565b60405180910390f35b6103e960048036038101906103e49190613bf0565b610da0565b6040516103f69190613ca6565b60405180910390f35b61041960048036038101906104149190613d41565b610e45565b604051610427929190613d81565b60405180910390f35b61044a60048036038101906104459190613daa565b610e79565b6040516104579190613ca6565b60405180910390f35b61047a60048036038101906104759190613cee565b6111a0565b005b61049660048036038101906104919190613a80565b6111c0565b005b6104b260048036038101906104ad9190613a80565b61125a565b6040516104bf9190613ca6565b60405180910390f35b6104d06112cb565b6040516104dd9190613ca6565b60405180910390f35b61050060048036038101906104fb9190613a80565b6112d5565b60405161050d9190613ba9565b60405180910390f35b610530600480360381019061052b9190613cc1565b611386565b60405161053d9190613ecf565b60405180910390f35b610560600480360381019061055b9190613cc1565b61148f565b60405161056d9190613ca6565b60405180910390f35b610590600480360381019061058b9190613a80565b611546565b60405161059d9190613f59565b60405180910390f35b6105c060048036038101906105bb9190613d41565b6115a5565b005b6105dc60048036038101906105d79190613f74565b611744565b6040516105e99190613ca6565b60405180910390f35b6105fa611766565b6040516106079190613ba9565b60405180910390f35b61062a60048036038101906106259190613a80565b611790565b6040516106379190613ca6565b60405180910390f35b6106486119a2565b6040516106559190613b46565b60405180910390f35b61067860048036038101906106739190613f74565b611a34565b6040516106859190613ca6565b60405180910390f35b6106a860048036038101906106a39190613ff3565b611a77565b005b6106c460048036038101906106bf9190613a80565b611a8d565b005b6106e060048036038101906106db9190613c30565b611b27565b6040516106ed9190613ca6565b60405180910390f35b6106fe611b9b565b60405161070b9190613ca6565b60405180910390f35b61072e6004803603810190610729919061417b565b611ba5565b60405161073b9190613ca6565b60405180910390f35b61075e60048036038101906107599190614279565b611c06565b005b61077a60048036038101906107759190613a80565b611c68565b6040516107879190613a2f565b60405180910390f35b610798611c8a565b6040516107a59190613ca6565b60405180910390f35b6107c860048036038101906107c39190613a80565b611c94565b6040516107d59190613b46565b60405180910390f35b6107f860048036038101906107f39190613f74565b611d3b565b6040516108059190613ca6565b60405180910390f35b61082860048036038101906108239190613a80565b612156565b005b610844600480360381019061083f91906142fc565b6121f0565b6040516108519190613a2f565b60405180910390f35b610862612284565b60405161086f9190613ca6565b60405180910390f35b610892600480360381019061088d9190613f74565b61228e565b60405161089f9190613ca6565b60405180910390f35b6108c260048036038101906108bd9190613a80565b6122a5565b6040516108cf9190613ca6565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094b575061094a826122df565b5b9050919050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990614388565b60405180910390fd5b80600e8190555050565b6060600080546109fb906143d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a27906143d7565b8015610a745780601f10610a4957610100808354040283529160200191610a74565b820191906000526020600020905b815481529060010190602001808311610a5757829003601f168201915b5050505050905090565b6000610a89826123c1565b610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061447a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0e826112d5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b759061450c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b9d61242d565b73ffffffffffffffffffffffffffffffffffffffff161480610bcc5750610bcb81610bc661242d565b6121f0565b5b610c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c029061459e565b60405180910390fd5b610c158383612435565b505050565b6000808585610c2991906145ed565b905060008684610c3991906145ed565b90506000610c48828785611a34565b9050809350505050949350505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614388565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600880549050905090565b610d4a610d4461242d565b826124ee565b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8090614693565b60405180910390fd5b610d948383836125cc565b505050565b6000919050565b6000610dab8361148f565b8210610dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de390614725565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080620186a08385610e589190614745565b610e6291906147ce565b91508184610e7091906145ed565b90509250929050565b600082600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401610ed99291906147ff565b602060405180830381865afa158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061483d565b1015610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906148b6565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcc919061483d565b9050610fd883826126d7565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401611037939291906148d6565b6020604051808303816000875af1158015611056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107a9190614922565b50600042905063bbf81e0081611090919061494f565b8711156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906149f1565b60405180910390fd5b63bbf81e00816110e2919061494f565b861115611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b90614a5d565b60405180910390fd5b6040518060a0016040528088815260200187815260200186815260200186815260200188815250600c600084815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508192505050949350505050565b6111bb83838360405180602001604052806000815250611c06565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790614388565b60405180910390fd5b8060118190555050565b6000611264610d2c565b82106112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90614aef565b60405180910390fd5b600882815481106112b9576112b8614b0f565b5b90600052602060002001549050919050565b6000601154905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490614bb0565b60405180910390fd5b80915050919050565b606060006113938361148f565b9050600081036113ef57600067ffffffffffffffff8111156113b8576113b7614038565b5b6040519080825280602002602001820160405280156113e65781602001602082028036833780820191505090505b5091505061148a565b60008167ffffffffffffffff81111561140b5761140a614038565b5b6040519080825280602002602001820160405280156114395781602001602082028036833780820191505090505b50905060005b82811015611483576114518582610da0565b82828151811061146457611463614b0f565b5b602002602001018181525050808061147b90614bd0565b91505061143f565b5080925050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f690614c8a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61154e61394c565b600c60008381526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050919050565b6115ae82611c68565b156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590614cf6565b60405180910390fd5b6115f782611790565b506116033330846125cc565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611662939291906148d6565b6020604051808303816000875af1158015611681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a59190614922565b506000429050604051806060016040528082815260200182815260200183815250600f600085815260200190815260200160002060008201518160000155602082015181600101556040820151816002015590505082823373ffffffffffffffffffffffffffffffffffffffff167fa7cce4e8ff59a515dccbee3a6382e94deb1db79bdb43cf35a51251d41ea395f060405160405180910390a4505050565b60008382846117539190614745565b61175d91906147ce565b90509392505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061179b82611c68565b6117af576117a8826128b0565b905061199d565b60004290506000601054600f6000868152602001908152602001600020600001546117da919061494f565b905042811161181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614d62565b60405180910390fd5b6000600c60008681526020019081526020016000206040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509050600061188c82600001518360200151846040015187610c1a565b905060008183604001516118a091906145ed565b9050600081116118bf576118b387610d99565b9550505050505061199d565b6000600f60008981526020019081526020016000206002015490506000600f60008a815260200190815260200160002060010154876118fe91906145ed565b9050600061191a866040015185611914866122a5565b85611b27565b9050600081876020015161192e91906145ed565b905080600c60008d81526020019081526020016000206001018190555088600f60008d815260200190815260200160002060010181905550888111611986576119768b610d99565b995050505050505050505061199d565b6119918b338b6129b1565b99505050505050505050505b919050565b6060600180546119b1906143d7565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd906143d7565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b5050505050905090565b6000818410611a4557829050611a70565b60008411611a565760009050611a70565b818484611a639190614745565b611a6d91906147ce565b90505b9392505050565b611a89611a8261242d565b8383612c54565b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1490614388565b60405180910390fd5b8060108190555050565b600080611b3a86856402540be400611744565b90506000611b4e86866402540be400611744565b9050600060028284611b60919061494f565b611b6a91906147ce565b905060006402540be4008287611b809190614745565b611b8a91906147ce565b905080945050505050949350505050565b6000600e54905090565b600080825190506000805b82811015611bfb57611bdb858281518110611bce57611bcd614b0f565b5b6020026020010151611790565b82611be6919061494f565b91508080611bf390614bd0565b915050611bb0565b508092505050919050565b611c17611c1161242d565b836124ee565b611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90614693565b60405180910390fd5b611c6284848484612dc0565b50505050565b600080600f600084815260200190815260200160002060020154119050919050565b6000601054905090565b6060611c9f826123c1565b611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd590614df4565b60405180910390fd5b6000611ce8612e1c565b90506000815111611d085760405180602001604052806000815250611d33565b80611d1284612e33565b604051602001611d23929190614e50565b6040516020818303038152906040525b915050919050565b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b8152600401611d8d9190613ca6565b602060405180830381865afa158015611daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dce9190614e89565b73ffffffffffffffffffffffffffffffffffffffff1614611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b90614f02565b60405180910390fd5b6000600c60008681526020019081526020016000206040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060008411611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290614f6e565b60405180910390fd5b60008311611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614fda565b60405180910390fd5b8284611f0a919061494f565b816040015114611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690615046565b60405180910390fd5b600080600d541115611fc157611f6b8260400151600d54610e45565b5080915050808511611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906150b2565b60405180910390fd5b8085611fbe91906145ed565b94505b60003073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612032919061483d565b905061203e33826126d7565b6040518060a0016040528084600001518152602001846020015181526020018681526020018681526020018460000151815250600c6000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015590505085600c60008981526020019081526020016000206002018190555085600c60008981526020019081526020016000206003018190555080873373ffffffffffffffffffffffffffffffffffffffff167fcbec30f3f612eea513363bc11396c0d7d2117bc8a87f8f376ebb781562df610a86604001518a8a8860405161214194939291906150d2565b60405180910390a48093505050509392505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614388565b60405180910390fd5b80600d8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600d54905090565b600061229c84848433610e79565b90509392505050565b6000620186a0601154036122bb578190506122da565b620186a0601154836122cd9190614745565b6122d791906147ce565b90505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123aa57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806123ba57506123b982612f93565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124a8836112d5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124f9826123c1565b612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f90615189565b60405180910390fd5b6000612543836112d5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125b257508373ffffffffffffffffffffffffffffffffffffffff1661259a84610a7e565b73ffffffffffffffffffffffffffffffffffffffff16145b806125c357506125c281856121f0565b5b91505092915050565b6125d7838383612ffd565b6000600e5403156126d2573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061264757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6126d257600061266f600c600084815260200190815260200160002060020154600e54610e45565b915050600081116126b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ac906148b6565b60405180910390fd5b80600c600084815260200190815260200160002060020181905550505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273d906151f5565b60405180910390fd5b61274f816123c1565b1561278f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278690615261565b60405180910390fd5b61279b60008383613263565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127eb919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128ac60008383613375565b5050565b60003373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016129029190613ca6565b602060405180830381865afa15801561291f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129439190614e89565b73ffffffffffffffffffffffffffffffffffffffff1614612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090614f02565b60405180910390fd5b60004290506129a98333836129b1565b915050919050565b600080600c60008681526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000816040015111612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a44906152cd565b60405180910390fd5b8281600001511115612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90615339565b60405180910390fd5b6000612aae82600001518360200151846040015187610c1a565b905060008111612af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aea906153a5565b60405180910390fd5b8160400151811115612b0757816040015190505b6000818360400151612b1991906145ed565b905060008103612b6f57600c600088815260200190815260200160002060008082016000905560018201600090556002820160009055600382016000905560048201600090555050612b6a8761337a565b612ba6565b80600c60008981526020019081526020016000206002018190555084600c6000898152602001908152602001600020600001819055505b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87846040518363ffffffff1660e01b8152600401612c039291906153c5565b6020604051808303816000875af1158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190614922565b508193505050509392505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb99061543a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612db39190613a2f565b60405180910390a3505050565b612dcb8484846125cc565b612dd784848484613497565b612e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0d906154cc565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008203612e7a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f8e565b600082905060005b60008214612eac578080612e9590614bd0565b915050600a82612ea591906147ce565b9150612e82565b60008167ffffffffffffffff811115612ec857612ec7614038565b5b6040519080825280601f01601f191660200182016040528015612efa5781602001600182028036833780820191505090505b5090505b60008514612f8757600182612f1391906145ed565b9150600a85612f2291906154ec565b6030612f2e919061494f565b60f81b818381518110612f4457612f43614b0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f8091906147ce565b9450612efe565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8273ffffffffffffffffffffffffffffffffffffffff1661301d826112d5565b73ffffffffffffffffffffffffffffffffffffffff1614613073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306a9061558f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d990615621565b60405180910390fd5b6130ed838383613263565b6130f8600082612435565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461314891906145ed565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461319f919061494f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461325e838383613375565b505050565b61326e83838361361e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132b0576132ab81613623565b6132ef565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146132ee576132ed838261366c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133315761332c816137d9565b613370565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461336f5761336e82826138aa565b5b5b505050565b505050565b6000613385826112d5565b905061339381600084613263565b61339e600083612435565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133ee91906145ed565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461349381600084613375565b5050565b60006134b88473ffffffffffffffffffffffffffffffffffffffff16613929565b15613611578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134e161242d565b8786866040518563ffffffff1660e01b81526004016135039493929190615696565b6020604051808303816000875af192505050801561353f57506040513d601f19601f8201168201806040525081019061353c91906156f7565b60015b6135c1573d806000811461356f576040519150601f19603f3d011682016040523d82523d6000602084013e613574565b606091505b5060008151036135b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b0906154cc565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613616565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136798461148f565b61368391906145ed565b9050600060076000848152602001908152602001600020549050818114613768576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137ed91906145ed565b905060006009600084815260200190815260200160002054905060006008838154811061381d5761381c614b0f565b5b90600052602060002001549050806008838154811061383f5761383e614b0f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061388e5761388d615724565b5b6001900381819060005260206000200160009055905550505050565b60006138b58361148f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6139c48161398f565b81146139cf57600080fd5b50565b6000813590506139e1816139bb565b92915050565b6000602082840312156139fd576139fc613985565b5b6000613a0b848285016139d2565b91505092915050565b60008115159050919050565b613a2981613a14565b82525050565b6000602082019050613a446000830184613a20565b92915050565b6000819050919050565b613a5d81613a4a565b8114613a6857600080fd5b50565b600081359050613a7a81613a54565b92915050565b600060208284031215613a9657613a95613985565b5b6000613aa484828501613a6b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ae7578082015181840152602081019050613acc565b83811115613af6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b1882613aad565b613b228185613ab8565b9350613b32818560208601613ac9565b613b3b81613afc565b840191505092915050565b60006020820190508181036000830152613b608184613b0d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b9382613b68565b9050919050565b613ba381613b88565b82525050565b6000602082019050613bbe6000830184613b9a565b92915050565b613bcd81613b88565b8114613bd857600080fd5b50565b600081359050613bea81613bc4565b92915050565b60008060408385031215613c0757613c06613985565b5b6000613c1585828601613bdb565b9250506020613c2685828601613a6b565b9150509250929050565b60008060008060808587031215613c4a57613c49613985565b5b6000613c5887828801613a6b565b9450506020613c6987828801613a6b565b9350506040613c7a87828801613a6b565b9250506060613c8b87828801613a6b565b91505092959194509250565b613ca081613a4a565b82525050565b6000602082019050613cbb6000830184613c97565b92915050565b600060208284031215613cd757613cd6613985565b5b6000613ce584828501613bdb565b91505092915050565b600080600060608486031215613d0757613d06613985565b5b6000613d1586828701613bdb565b9350506020613d2686828701613bdb565b9250506040613d3786828701613a6b565b9150509250925092565b60008060408385031215613d5857613d57613985565b5b6000613d6685828601613a6b565b9250506020613d7785828601613a6b565b9150509250929050565b6000604082019050613d966000830185613c97565b613da36020830184613c97565b9392505050565b60008060008060808587031215613dc457613dc3613985565b5b6000613dd287828801613a6b565b9450506020613de387828801613a6b565b9350506040613df487828801613a6b565b9250506060613e0587828801613bdb565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613e4681613a4a565b82525050565b6000613e588383613e3d565b60208301905092915050565b6000602082019050919050565b6000613e7c82613e11565b613e868185613e1c565b9350613e9183613e2d565b8060005b83811015613ec2578151613ea98882613e4c565b9750613eb483613e64565b925050600181019050613e95565b5085935050505092915050565b60006020820190508181036000830152613ee98184613e71565b905092915050565b60a082016000820151613f076000850182613e3d565b506020820151613f1a6020850182613e3d565b506040820151613f2d6040850182613e3d565b506060820151613f406060850182613e3d565b506080820151613f536080850182613e3d565b50505050565b600060a082019050613f6e6000830184613ef1565b92915050565b600080600060608486031215613f8d57613f8c613985565b5b6000613f9b86828701613a6b565b9350506020613fac86828701613a6b565b9250506040613fbd86828701613a6b565b9150509250925092565b613fd081613a14565b8114613fdb57600080fd5b50565b600081359050613fed81613fc7565b92915050565b6000806040838503121561400a57614009613985565b5b600061401885828601613bdb565b925050602061402985828601613fde565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61407082613afc565b810181811067ffffffffffffffff8211171561408f5761408e614038565b5b80604052505050565b60006140a261397b565b90506140ae8282614067565b919050565b600067ffffffffffffffff8211156140ce576140cd614038565b5b602082029050602081019050919050565b600080fd5b60006140f76140f2846140b3565b614098565b9050808382526020820190506020840283018581111561411a576141196140df565b5b835b81811015614143578061412f8882613a6b565b84526020840193505060208101905061411c565b5050509392505050565b600082601f83011261416257614161614033565b5b81356141728482602086016140e4565b91505092915050565b60006020828403121561419157614190613985565b5b600082013567ffffffffffffffff8111156141af576141ae61398a565b5b6141bb8482850161414d565b91505092915050565b600080fd5b600067ffffffffffffffff8211156141e4576141e3614038565b5b6141ed82613afc565b9050602081019050919050565b82818337600083830152505050565b600061421c614217846141c9565b614098565b905082815260208101848484011115614238576142376141c4565b5b6142438482856141fa565b509392505050565b600082601f8301126142605761425f614033565b5b8135614270848260208601614209565b91505092915050565b6000806000806080858703121561429357614292613985565b5b60006142a187828801613bdb565b94505060206142b287828801613bdb565b93505060406142c387828801613a6b565b925050606085013567ffffffffffffffff8111156142e4576142e361398a565b5b6142f08782880161424b565b91505092959194509250565b6000806040838503121561431357614312613985565b5b600061432185828601613bdb565b925050602061433285828601613bdb565b9150509250929050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000614372600a83613ab8565b915061437d8261433c565b602082019050919050565b600060208201905081810360008301526143a181614365565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ef57607f821691505b602082108103614402576144016143a8565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614464602c83613ab8565b915061446f82614408565b604082019050919050565b6000602082019050818103600083015261449381614457565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006144f6602183613ab8565b91506145018261449a565b604082019050919050565b60006020820190508181036000830152614525816144e9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000614588603883613ab8565b91506145938261452c565b604082019050919050565b600060208201905081810360008301526145b78161457b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145f882613a4a565b915061460383613a4a565b925082821015614616576146156145be565b5b828203905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061467d603183613ab8565b915061468882614621565b604082019050919050565b600060208201905081810360008301526146ac81614670565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061470f602b83613ab8565b915061471a826146b3565b604082019050919050565b6000602082019050818103600083015261473e81614702565b9050919050565b600061475082613a4a565b915061475b83613a4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614794576147936145be565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147d982613a4a565b91506147e483613a4a565b9250826147f4576147f361479f565b5b828204905092915050565b60006040820190506148146000830185613b9a565b6148216020830184613b9a565b9392505050565b60008151905061483781613a54565b92915050565b60006020828403121561485357614852613985565b5b600061486184828501614828565b91505092915050565b7f6e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b60006148a0601183613ab8565b91506148ab8261486a565b602082019050919050565b600060208201905081810360008301526148cf81614893565b9050919050565b60006060820190506148eb6000830186613b9a565b6148f86020830185613b9a565b6149056040830184613c97565b949350505050565b60008151905061491c81613fc7565b92915050565b60006020828403121561493857614937613985565b5b60006149468482850161490d565b91505092915050565b600061495a82613a4a565b915061496583613a4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561499a576149996145be565b5b828201905092915050565b7f7374617274206461746520697320746f6f206661720000000000000000000000600082015250565b60006149db601583613ab8565b91506149e6826149a5565b602082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f656e64206461746520697320746f6f2066617200000000000000000000000000600082015250565b6000614a47601383613ab8565b9150614a5282614a11565b602082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614ad9602c83613ab8565b9150614ae482614a7d565b604082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000614b9a602983613ab8565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b6000614bdb82613a4a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c0d57614c0c6145be565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614c74602a83613ab8565b9150614c7f82614c18565b604082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f546f6b656e20616c7265616479207374616b6564000000000000000000000000600082015250565b6000614ce0601483613ab8565b9150614ceb82614caa565b602082019050919050565b60006020820190508181036000830152614d0f81614cd3565b9050919050565b7f7374616b696e6720636c69666600000000000000000000000000000000000000600082015250565b6000614d4c600d83613ab8565b9150614d5782614d16565b602082019050919050565b60006020820190508181036000830152614d7b81614d3f565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614dde602f83613ab8565b9150614de982614d82565b604082019050919050565b60006020820190508181036000830152614e0d81614dd1565b9050919050565b600081905092915050565b6000614e2a82613aad565b614e348185614e14565b9350614e44818560208601613ac9565b80840191505092915050565b6000614e5c8285614e1f565b9150614e688284614e1f565b91508190509392505050565b600081519050614e8381613bc4565b92915050565b600060208284031215614e9f57614e9e613985565b5b6000614ead84828501614e74565b91505092915050565b7f546f6b656e206973206e6f74206f776e656420627920796f7500000000000000600082015250565b6000614eec601983613ab8565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f4c65667420616d6f756e74206d75737420626520677420300000000000000000600082015250565b6000614f58601883613ab8565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f526967687420616d6f756e74206d757374206265206774203000000000000000600082015250565b6000614fc4601983613ab8565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f416d6f756e747320646f206e6f74206164642075700000000000000000000000600082015250565b6000615030601583613ab8565b915061503b82614ffa565b602082019050919050565b6000602082019050818103600083015261505f81615023565b9050919050565b7f4c65667420616d6f756e74206d75737420626520677420666565000000000000600082015250565b600061509c601a83613ab8565b91506150a782615066565b602082019050919050565b600060208201905081810360008301526150cb8161508f565b9050919050565b60006080820190506150e76000830187613c97565b6150f46020830186613c97565b6151016040830185613c97565b61510e6060830184613c97565b95945050505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000615173602c83613ab8565b915061517e82615117565b604082019050919050565b600060208201905081810360008301526151a281615166565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006151df602083613ab8565b91506151ea826151a9565b602082019050919050565b6000602082019050818103600083015261520e816151d2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061524b601c83613ab8565b915061525682615215565b602082019050919050565b6000602082019050818103600083015261527a8161523e565b9050919050565b7f546f6b656e206973206e6f742076657374656400000000000000000000000000600082015250565b60006152b7601383613ab8565b91506152c282615281565b602082019050919050565b600060208201905081810360008301526152e6816152aa565b9050919050565b7f56657374696e6720686173206e6f742073746172746564000000000000000000600082015250565b6000615323601783613ab8565b915061532e826152ed565b602082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b7f4e6f20746f6b656e7320746f20756e7665737400000000000000000000000000600082015250565b600061538f601383613ab8565b915061539a82615359565b602082019050919050565b600060208201905081810360008301526153be81615382565b9050919050565b60006040820190506153da6000830185613b9a565b6153e76020830184613c97565b9392505050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615424601983613ab8565b915061542f826153ee565b602082019050919050565b6000602082019050818103600083015261545381615417565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006154b6603283613ab8565b91506154c18261545a565b604082019050919050565b600060208201905081810360008301526154e5816154a9565b9050919050565b60006154f782613a4a565b915061550283613a4a565b9250826155125761551161479f565b5b828206905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000615579602583613ab8565b91506155848261551d565b604082019050919050565b600060208201905081810360008301526155a88161556c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061560b602483613ab8565b9150615616826155af565b604082019050919050565b6000602082019050818103600083015261563a816155fe565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061566882615641565b615672818561564c565b9350615682818560208601613ac9565b61568b81613afc565b840191505092915050565b60006080820190506156ab6000830187613b9a565b6156b86020830186613b9a565b6156c56040830185613c97565b81810360608301526156d7818461565d565b905095945050505050565b6000815190506156f1816139bb565b92915050565b60006020828403121561570d5761570c613985565b5b600061571b848285016156e2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212208bcdd80aefa7ea6f5883cf49ca06bfee1f3502927c535aeb3f0dfddab1d318af64736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
