{
  "_format": "hh-sol-artifact-1",
  "contractName": "Rollup",
  "sourceName": "contracts/L1/fraud-proof/Rollup.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AssertionAlreadyResolved",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AssertionOutOfRange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ChallengePeriodPending",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ChallengedStaker",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DifferentParent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EmptyAssertion",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker1Challenge",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "staker2Challenge",
          "type": "address"
        }
      ],
      "name": "InDifferentChallenge",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InboxReadLimitExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientStake",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidParent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinimumAssertionPeriodNotPassed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoStaker",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoUnresolvedAssertion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotAllStaked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInChallenge",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotStaked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ParentAssertionUnstaked",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PreviousStateHash",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RedundantInitialized",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "StakedOnUnconfirmedAssertion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "StakerStakedOnTarget",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "StakersPresent",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TransferFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UnproposedAssertion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongOrder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "challengeAddr",
          "type": "address"
        }
      ],
      "name": "AssertionChallenged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        }
      ],
      "name": "AssertionConfirmed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asserterAddr",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "vmHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inboxSize",
          "type": "uint256"
        }
      ],
      "name": "AssertionCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        }
      ],
      "name": "AssertionRejected",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "stakerAddr",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        }
      ],
      "name": "StakerStaked",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "toAddAddresses",
          "type": "address[]"
        }
      ],
      "name": "addToOperatorWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "toAddAddresses",
          "type": "address[]"
        }
      ],
      "name": "addToStakerWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        }
      ],
      "name": "advanceStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "assertions",
      "outputs": [
        {
          "internalType": "contract AssertionMap",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseStakeAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[2]",
          "name": "players",
          "type": "address[2]"
        },
        {
          "internalType": "uint256[2]",
          "name": "assertionIDs",
          "type": "uint256[2]"
        }
      ],
      "name": "challengeAssertion",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "challengeCtx",
      "outputs": [
        {
          "internalType": "bool",
          "name": "completed",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "challengeAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "defenderAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "challengerAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "defenderAssertionID",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "challengerAssertionID",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "winner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "loser",
          "type": "address"
        }
      ],
      "name": "completeChallenge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "confirmFirstUnresolvedAssertion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "confirmedInboxSize",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "vmHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "inboxSize",
          "type": "uint256"
        }
      ],
      "name": "createAssertion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "vmHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "inboxSize",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "_batch",
          "type": "bytes32[]"
        },
        {
          "internalType": "uint256",
          "name": "_shouldStartAtElement",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "createAssertionWithStateBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentRequiredStake",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_verifier",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stakeToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_libAddressManager",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_assertionMap",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minimumAssertionPeriod",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_baseStakeAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_initialVMhash",
          "type": "bytes32"
        },
        {
          "internalType": "address[]",
          "name": "stakerWhitelists",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "operatorWhitelists",
          "type": "address[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "isStaked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastConfirmedAssertionID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastCreatedAssertionID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastResolvedAssertionID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "libAddressManager",
      "outputs": [
        {
          "internalType": "contract Lib_AddressManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minimumAssertionPeriod",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "numStakers",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "operatorWhitelist",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "operatorslist",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "registers",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rejectFirstUnresolvedAssertion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "batchIndex",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "batchRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "batchSize",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "prevTotalElements",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "signature",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct Lib_BVMCodec.ChainBatchHeader",
          "name": "_batchHeader",
          "type": "tuple"
        }
      ],
      "name": "rejectLatestCreatedAssertionWithBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "toRemoveAddresses",
          "type": "address[]"
        }
      ],
      "name": "removeFromOperatorWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "toRemoveAddresses",
          "type": "address[]"
        }
      ],
      "name": "removeFromStakerWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeOldZombies",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "stakerAddress",
          "type": "address"
        }
      ],
      "name": "removeStake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "name": "resolve",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_shouldRollBack",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_shouldStartAtElement",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "rollbackL2Chain",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stakeToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "stakerWhitelist",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "stakers",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isStaked",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "amountStaked",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "assertionID",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "currentChallenge",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "stakerslist",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "stakeAmount",
          "type": "uint256"
        }
      ],
      "name": "unstake",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "verifier",
      "outputs": [
        {
          "internalType": "contract IVerifierEntry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "withdrawableFunds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "zombies",
      "outputs": [
        {
          "internalType": "address",
          "name": "stakerAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "lastAssertionID",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50600080546001600160a01b03191690556200002c62000032565b62000101565b600054600160a81b900460ff1615620000a15760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff600160a01b90910481161015620000ff576000805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b616f8980620001116000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c80636aabc35011610191578063b553ee84116100e3578063cfc5901d11610097578063f2fde38b11610071578063f2fde38b14610707578063fa7803e61461071a578063fe2ba8481461072d57600080fd5b8063cfc5901d146106c1578063de574efc146106d4578063e03c8632146106e757600080fd5b8063c8525c3e116100c8578063c8525c3e14610693578063c94b5847146106a6578063c97a5919146106ae57600080fd5b8063b553ee8414610677578063b6da898f1461068057600080fd5b80638c669739116101455780639efbea231161011f5780639efbea2314610648578063a56ba93b1461065b578063aca9a5181461066457600080fd5b80638c669739146105aa5780638da5cb5b146105b25780639168ae72146105c557600080fd5b80637112955911610176578063711295591461057b5780637acb7757146105845780638821b2ae1461059757600080fd5b80636aabc350146105495780636c8b052a1461057257600080fd5b806330b260751161024a578063461a4478116101fe57806351ed6a30116101d857806351ed6a30146104e75780636177fd18146104fa5780636a3685611461053657600080fd5b8063461a4478146104b957806349cd3004146104cc5780634d26732d146104df57600080fd5b80633ccfd60b1161022f5780633ccfd60b1461049557806340d9224b1461049d57806345e38b64146104b057600080fd5b806330b260751461047a57806337d1fbdd1461048257600080fd5b80632aa234f6116102ac5780632f06d1b0116102865780632f06d1b0146104275780632f30cabd1461043a578063300a71611461045a57600080fd5b80632aa234f6146103ee5780632b7ac3f3146104015780632e17de781461041457600080fd5b80632052465e116102dd5780632052465e146103875780632906040e146103b9578063299ca478146103c357600080fd5b80630e456acf146102f9578063107035a414610370575b600080fd5b607754607854607954607a54607b5461032c9460ff8116946001600160a01b036101009092048216949082169391169186565b6040805196151587526001600160a01b0395861660208801529385169386019390935292166060840152608083019190915260a082015260c0015b60405180910390f35b61037960715481565b604051908152602001610367565b61039a610395366004614842565b610740565b604080516001600160a01b039093168352602083019190915201610367565b6103c1610778565b005b6000546103d6906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b6103d66103fc366004614842565b610aba565b6005546103d6906001600160a01b031681565b6103c1610422366004614842565b610ae4565b6103d661043536600461486c565b610cb9565b6103796104483660046148c6565b60756020526000908152604090205481565b6103796104683660046148c6565b60396020526000908152604090205481565b6103c161146c565b6103d6610490366004614842565b61186a565b6103c161187a565b6004546103d6906001600160a01b031681565b61037960015481565b6103d66104c73660046149b8565b6119e3565b6103c16104da366004614a55565b611a7d565b600254610379565b6003546103d6906001600160a01b031681565b6105266105083660046148c6565b6001600160a01b031660009081526073602052604090205460ff1690565b6040519015158152602001610367565b6103c1610544366004614b0f565b611d3e565b6103d66105573660046148c6565b6074602052600090815260409020546001600160a01b031681565b61037960725481565b61037960025481565b6103c1610592366004614b51565b611e80565b6103c16105a5366004614842565b612318565b6103c16124f9565b6038546103d6906001600160a01b031681565b6106126105d33660046148c6565b6073602052600090815260409020805460018201546002830154600384015460049094015460ff90931693919290916001600160a01b03908116911685565b6040805195151586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a001610367565b6103c1610656366004614b0f565b61256c565b61037960705481565b6103c1610672366004614b0f565b6127ae565b610379606f5481565b6103c161068e366004614b81565b6129f0565b6103c16106a1366004614b0f565b612e46565b610379612f82565b6103c16106bc366004614ba3565b613020565b6103c16106cf366004614cb1565b613545565b6103c16106e2366004614d01565b6136f8565b6103796106f53660046148c6565b603b6020526000908152604090205481565b6103c16107153660046148c6565b613c2f565b6103c1610728366004614dba565b613d0e565b6103c161073b3660046148c6565b613fdf565b6076818154811061075057600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b336000908152607460205260409020546001600160a01b03166107e25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064015b60405180910390fd5b607154606f54106108355760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000607254116108875760405162461bcd60e51b815260206004820152600860248201527f4e6f5374616b657200000000000000000000000000000000000000000000000060448201526064016107d9565b6000606f5460016108989190614e17565b600480546040517f828622750000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916382862275916108e59185910190815260200190565b60206040518083038186803b1580156108fd57600080fd5b505afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109359190614e2f565b4210156109845760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b607054600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b0316906330b947709060240160206040518083038186803b1580156109e257600080fd5b505afa1580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190614e2f565b14610a675760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964506172656e740000000000000000000000000000000000000060448201526064016107d9565b606f8054906000610a7783614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150565b603a8181548110610aca57600080fd5b6000918252602090912001546001600160a01b0316905081565b610aed336141a9565b33600090815260736020526040902060705460028201541115610b525760405162461bcd60e51b815260206004820152601c60248201527f5374616b65644f6e556e636f6e6669726d6564417373657274696f6e0000000060448201526064016107d9565b6002548160010154610b649190614e81565b821115610bb35760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b81816001016000828254610bc79190614e81565b90915550506003546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614e98565b610cb55760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b5050565b336000908152607460205260408120546001600160a01b0316610d1e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b81356020830135808210610d745760405162461bcd60e51b815260206004820152600a60248201527f57726f6e674f726465720000000000000000000000000000000000000000000060448201526064016107d9565b607154811115610dc65760405162461bcd60e51b815260206004820152601360248201527f556e70726f706f736564417373657274696f6e0000000000000000000000000060448201526064016107d9565b8160705410610e175760405162461bcd60e51b815260206004820152601860248201527f417373657274696f6e416c72656164795265736f6c766564000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526000916001600160a01b03909116906330b947709060240160206040518083038186803b158015610e7757600080fd5b505afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190614e2f565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916330b9477091610efc9186910190815260200190565b60206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614e2f565b8114610f9a5760405162461bcd60e51b815260206004820152600f60248201527f446966666572656e74506172656e74000000000000000000000000000000000060448201526064016107d9565b6000610fa960208801886148c6565b90506000610fbd6040890160208a016148c6565b9050806001600160a01b0316826001600160a01b031614156110475760405162461bcd60e51b815260206004820152602560248201527f646566656e64657220616e64206368616c6c656e6765206d757374206e6f742060448201527f657175616c00000000000000000000000000000000000000000000000000000060648201526084016107d9565b6001600160a01b03808316600090815260746020526040808220548484168352912054908216911661107882614211565b61108181614211565b600060405161108f906147d7565b604051809103906000f0801580156110ab573d6000803e3d6000fd5b506001600160a01b038084166000908152607360209081526040808320600490810180548688167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092558a871686528386209092018054831682179055825160c0810184529485529284018390528a8516848301819052948a1660608501819052608085018f905260a09094018d905260778054610100949094027fffffffffffffffffffffff00000000000000000000000000000000000000000090941693909317909255607880548316909417909355607980549091169091179055607a8a9055607b8990555190915081907fd0ebe74b4f7d89a9b0fdc9d95f887a7b925c6c7300b5c4b2c3304d97925840fa906111e0908b9084909182526001600160a01b0316602082015260400190565b60405180910390a1600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018990526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b15801561124857600080fd5b505afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018b90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b1580156112e157600080fd5b505afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018e90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b15801561137a57600080fd5b505afa15801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190614e2f565b6005546040517fabf480130000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b8116602483015291821660448201523060648201526084810186905260a4810185905260c4810183905291925086169063abf480139060e401600060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b50959e5050505050505050505050505050505b92915050565b336000908152607460205260409020546001600160a01b03166114d15760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b607154606f54106115245760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000606f5460016115359190614e17565b607054600480546040517f30b9477000000000000000000000000000000000000000000000000000000000815291820184905292935090916001600160a01b0316906330b947709060240160206040518083038186803b15801561159857600080fd5b505afa1580156115ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d09190614e2f565b14156117a157600480546040517f828622750000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b03169063828622759060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190614e2f565b4210156116b85760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b6116c181614285565b600480546040517f366b2b690000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b03169063366b2b699060240160206040518083038186803b15801561171c57600080fd5b505afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117549190614e2f565b146117a15760405162461bcd60e51b815260206004820152600e60248201527f5374616b65727350726573656e7400000000000000000000000000000000000060448201526064016107d9565b606f80549060006117b183614e48565b91905055507f5b24ab8ceb442373727ac5c559a027521cb52db451c74710ebed9faa5fe15a7c606f546040516117e991815260200190565b60405180910390a160048054606f546040517fd8a4e5af000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063d8a4e5af90602401600060405180830381600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b5050505050565b603c8181548110610aca57600080fd5b336000908152607460205260409020546001600160a01b03166118df5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b33600081815260756020526040808220805492905560035490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101939093526024830182905290916001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561195c57600080fd5b505af1158015611970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119949190614e98565b6119e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b50565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac190611a2d908590600401614f41565b60206040518083038186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614f54565b336000908152607460205260409020546001600160a01b0316611ae25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b611b206040518060400160405280600c81526020017f42564d5f526f6c6c7570657200000000000000000000000000000000000000008152506119e3565b6001600160a01b0316336001600160a01b031614611ba65760405162461bcd60e51b815260206004820152603560248201527f6d73672e73656e646572206973206e6f7420726f6c6c75702070726f706f736560448201527f722c2063616e277420617070656e64206261746368000000000000000000000060648201526084016107d9565b611bb087876129f0565b6000611bf06040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b90506000816001600160a01b03168787878787604051602401611c17959493929190614f71565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2169f79f0000000000000000000000000000000000000000000000000000000017905251611c7a9190614ffa565b6000604051808303816000865af19150503d8060008114611cb7576040519150601f19603f3d011682016040523d82523d6000602084013e611cbc565b606091505b5050905080611d335760405162461bcd60e51b815260206004820152602960248201527f73636320617070656e64207374617465206261746368206661696c65642c207260448201527f657665727420616c6c000000000000000000000000000000000000000000000060648201526084016107d9565b505050505050505050565b6038546001600160a01b03163314611d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603a5460005b82811015611e7a57611db08183614e17565b60396000868685818110611dc657611dc6614eba565b9050602002016020810190611ddb91906148c6565b6001600160a01b03168152602081019190915260400160002055603a848483818110611e0957611e09614eba565b9050602002016020810190611e1e91906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580611e7281614e48565b915050611d9e565b50505050565b33600081815260396020526040902054603a80548392908110611ea557611ea5614eba565b6000918252602090912001546001600160a01b031614611f075760405162461bcd60e51b815260206004820152601760248201527f4e4f545f494e5f5354414b45525f57484954454c49535400000000000000000060448201526064016107d9565b6001600160a01b0382166000818152603b6020526040902054603c8054859392908110611f3657611f36614eba565b6000918252602090912001546001600160a01b031614611f985760405162461bcd60e51b815260206004820152601960248201527f4e4f545f494e5f4f50455241544f525f57484954454c4953540000000000000060448201526064016107d9565b6003546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190614e98565b6120875760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b3360009081526073602052604090205460ff161561215f57336000908152607360205260409020600301546001600160a01b038481169116146121325760405162461bcd60e51b815260206004820152602560248201527f7374616b6572203d3e206f70657261746f72206d617070696e67206e6f74207560448201527f6e6971756500000000000000000000000000000000000000000000000000000060648201526084016107d9565b3360009081526073602052604081206001018054869290612154908490614e17565b90915550611e7a9050565b6001600160a01b0383811660009081526074602052604090205416156121c75760405162461bcd60e51b815260206004820152601460248201527f6f70657261746f72206973206f6363757069656400000000000000000000000060448201526064016107d9565b6002548410156122195760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b6040805160a0810182526001808252602080830188815260008486018181526001600160a01b03808b16606088018181526080890185815233808752607389528b87209a518b549015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116178b559651988a01989098559251600289015591516003880180549183167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055955160049097018054979091169686169690961790955593845260749091529282208054909116909217909155607280549161230783614e48565b9190505550611e7a33607054614391565b336000908152607460205260409020546001600160a01b031661237d5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b031680845260739092529091206002810154831115806123b8575060715483115b156124055760405162461bcd60e51b815260206004820152601360248201527f417373657274696f6e4f75744f6652616e67650000000000000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018590526001600160a01b0316906330b947709060240160206040518083038186803b15801561246057600080fd5b505afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190614e2f565b8160020154146124ea5760405162461bcd60e51b815260206004820152601760248201527f506172656e74417373657274696f6e556e7374616b656400000000000000000060448201526064016107d9565b6124f48284614391565b505050565b336000908152607460205260409020546001600160a01b031661255e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b61256a607660006147e4565b565b6038546001600160a01b031633146125c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f4576000603b60008585858181106125e9576125e9614eba565b90506020020160208101906125fe91906148c6565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080603b6000603c6001603c8054905061263a9190614e81565b8154811061264a5761264a614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603c805461267f90600190614e81565b8154811061268f5761268f614eba565b600091825260209091200154603c80546001600160a01b0390921691839081106126bb576126bb614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603c8054806126fa576126fa615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155603b9085858581811061276a5761276a614eba565b905060200201602081019061277f91906148c6565b6001600160a01b03168152602081019190915260400160009081205550806127a681614e48565b9150506125c9565b6038546001600160a01b031633146128085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f45760006039600085858581811061282b5761282b614eba565b905060200201602081019061284091906148c6565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508060396000603a6001603a8054905061287c9190614e81565b8154811061288c5761288c614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603a80546128c190600190614e81565b815481106128d1576128d1614eba565b600091825260209091200154603a80546001600160a01b0390921691839081106128fd576128fd614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603a80548061293c5761293c615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559091019091556039908585858181106129ac576129ac614eba565b90506020020160208101906129c191906148c6565b6001600160a01b03168152602081019190915260400160009081205550806129e881614e48565b91505061280b565b336000908152607460205260409020546001600160a01b0316612a555760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b03908116808552607390935292206004015490911615612af75760405162461bcd60e51b815260206004820152603160248201527f63616e206e6f742063726561746520617373657274696f6e207768656e20737460448201527f616b657220696e206368616c6c656e676500000000000000000000000000000060648201526084016107d9565b6001600160a01b0381811660009081526073602052604090819020600201546001546004805493517f4e04886d000000000000000000000000000000000000000000000000000000008152908101839052919390921690634e04886d9060240160206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba79190614e2f565b612bb19043614e81565b1015612bff5760405162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d417373657274696f6e506572696f644e6f745061737365640060448201526064016107d9565b600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b031690632b27e93b9060240160206040518083038186803b158015612c5a57600080fd5b505afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c929190614e2f565b8311612ce05760405162461bcd60e51b815260206004820152600e60248201527f456d707479417373657274696f6e00000000000000000000000000000000000060448201526064016107d9565b60718054906000612cf083614e48565b9091555050607154604080519182523360208301528101859052606081018490527f5c610f28399ecc14b66149012a0197a5e3257a8c397125afee95d1cf4b9507349060800160405180910390a16004546071546001600160a01b0390911690634228158490868685612d6161446f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b50505050612df082607154614391565b606f8054906000612e0083614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150505050565b6038546001600160a01b03163314612ea05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603c5460005b82811015611e7a57612eb88183614e17565b603b6000868685818110612ece57612ece614eba565b9050602002016020810190612ee391906148c6565b6001600160a01b03168152602081019190915260400160002055603c848483818110612f1157612f11614eba565b9050602002016020810190612f2691906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580612f7a81614e48565b915050612ea6565b600480546070546040517f2b27e93b000000000000000000000000000000000000000000000000000000008152928301526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b158015612fe357600080fd5b505afa158015612ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301b9190614e2f565b905090565b6000547501000000000000000000000000000000000000000000900460ff161580801561306b575060005460017401000000000000000000000000000000000000000090910460ff16105b8061309d5750303b15801561309d575060005474010000000000000000000000000000000000000000900460ff166001145b61310f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d9565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561319557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6001600160a01b038d1615806131b257506001600160a01b038c16155b156131ff5760405162461bcd60e51b815260206004820152600b60248201527f5a65726f4164647265737300000000000000000000000000000000000000000060448201526064016107d9565b8c603860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b600560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060006001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b0316146132e95760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c81169190911790915560045416156133725760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b16908117825560018a905560028990556040517f07663706000000000000000000000000000000000000000000000000000000008152309281019290925290630766370690602401600060405180830381600087803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b50506000606f81905560708190556071819055600480546040517f42281584000000000000000000000000000000000000000000000000000000008152918201839052602482018b90526044820183905260648201929092524360848201526001600160a01b0390911692506342281584915060a401600060405180830381600087803b1580156134a757600080fd5b505af11580156134bb573d6000803e3d6000fd5b505050506134c98585611d3e565b6134d38383612e46565b801561353657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050505050565b6038546001600160a01b0316331461359f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60006135df6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b90506000816001600160a01b031685858560405160240161360293929190615045565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0bf3b5f200000000000000000000000000000000000000000000000000000000179052516136659190614ffa565b6000604051808303816000865af19150503d80600081146136a2576040519150601f19603f3d011682016040523d82523d6000602084013e6136a7565b606091505b50509050806118635760405162461bcd60e51b815260206004820152601b60248201527f63616c6c20726f6c6c4261636b4c32436861696e206661696c6564000000000060448201526064016107d9565b6038546001600160a01b031633146137525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60006137926040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe561dddc0000000000000000000000000000000000000000000000000000000017905290519192506000916001600160a01b0384169161380491614ffa565b6000604051808303816000865af19150503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5091505060008161385690615064565b84519091506138659082614e81565b6001146138d95760405162461bcd60e51b8152602060048201526024808201527f64656c657465206261746368207769746820676170206973206e6f7420616c6c60448201527f6f7765640000000000000000000000000000000000000000000000000000000060648201526084016107d9565b6000836001600160a01b0316856040516024016138f691906150a9565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5b4d90e200000000000000000000000000000000000000000000000000000000179052516139599190614ffa565b6000604051808303816000865af19150503d8060008114613996576040519150601f19603f3d011682016040523d82523d6000602084013e61399b565b606091505b5050905080613a125760405162461bcd60e51b815260206004820152602960248201527f7363632064656c657465207374617465206261746368206661696c65642c207260448201527f657665727420616c6c000000000000000000000000000000000000000000000060648201526084016107d9565b606f546071541015613a8c5760405162461bcd60e51b815260206004820152602e60248201527f64656c65746520617373657274696f6e206265666f7265206c6173742072657360448201527f6f6c76656420696e206572726f7200000000000000000000000000000000000060648201526084016107d9565b7f5b24ab8ceb442373727ac5c559a027521cb52db451c74710ebed9faa5fe15a7c607154604051613abf91815260200190565b60405180910390a1600480546071546040517fd0087d61000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063d0087d6190602401600060405180830381600087803b158015613b2557600080fd5b505af1158015613b39573d6000803e3d6000fd5b505060718054925090506000613b4e8361510a565b9091555050606f8054906000613b638361510a565b909155505060708054906000613b788361510a565b919050555060005b603a54811015613c275760715460736000603a8481548110613ba457613ba4614eba565b60009182526020808320909101546001600160a01b031683528201929092526040019020600201541115613c155760715460736000603a8481548110613bec57613bec614eba565b60009182526020808320909101546001600160a01b031683528201929092526040019020600201555b80613c1f81614e48565b915050613b80565b505050505050565b6038546001600160a01b03163314613c895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b6001600160a01b038116613d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d9565b6119e0816145d9565b336000908152607460205260409020546001600160a01b0316613d735760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b6001600160a01b038083166000908152607460205260408082205484841683529120549082169116613da4816141a9565b6000613db08383614643565b9050336001600160a01b03821614613e0a5760405162461bcd60e51b815260206004820152600c60248201527f4e6f744368616c6c656e6765000000000000000000000000000000000000000060448201526064016107d9565b6001600160a01b038216600090815260736020526040812060010154600254811115613e7457600254613e3d9082614e81565b6001600160a01b03851660009081526075602052604081208054909190613e65908490614e17565b90915550506002549150613e78565b8091505b6001600160a01b03851660009081526073602052604081206001018054849290613ea3908490614e17565b90915550506001600160a01b0380861660009081526073602052604080822060040180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905591861681522060020154613efe85614726565b604080518082019091526001600160a01b03958616815260208101918252607680546001808201835560009290925291517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed4600290930292830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965590517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed5909101555050607780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915550505050565b6038546001600160a01b031633146140395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b614042816141a9565b6001600160a01b0381166000908152607360205260409020607054600282015411156140b05760405162461bcd60e51b815260206004820152601c60248201527f5374616b65644f6e556e636f6e6669726d6564417373657274696f6e0000000060448201526064016107d9565b60018101546140be83614726565b6003546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561412557600080fd5b505af1158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d9190614e98565b6124f45760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b6001600160a01b03811660009081526073602052604090205460ff166119e05760405162461bcd60e51b815260206004820152600960248201527f4e6f745374616b6564000000000000000000000000000000000000000000000060448201526064016107d9565b61421a816141a9565b6001600160a01b0381811660009081526073602052604090206004015416156119e05760405162461bcd60e51b815260206004820152601060248201527f4368616c6c656e6765645374616b65720000000000000000000000000000000060448201526064016107d9565b600080805b60765481101561438a57600454607680546001600160a01b039092169163873fd089918791859081106142bf576142bf614eba565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101929092526001600160a01b0316602482015260440160206040518083038186803b15801561432d57600080fd5b505afa158015614341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143659190614e98565b15614378578161437481614e48565b9250505b8061438281614e48565b91505061428a565b5092915050565b6001600160a01b03828116600081815260736020526040908190206002018490556004805491517fa832c3ae00000000000000000000000000000000000000000000000000000000815290810185905260248101929092529091169063a832c3ae90604401600060405180830381600087803b15801561441057600080fd5b505af1158015614424573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590527f617d31491414a4ab2bd831e566a31837fa7fb6582921c91dffbbe83fbca789f3935001905060405180910390a15050565b6000806144b06040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc17b291b00000000000000000000000000000000000000000000000000000000179052905191925060009182916001600160a01b038516916145259190614ffa565b6000604051808303816000865af19150503d8060008114614562576040519150601f19603f3d011682016040523d82523d6000602084013e614567565b606091505b5091509150816145b95760405162461bcd60e51b815260206004820181905260248201527f63616c6c2046524155445f50524f4f465f57494e444f572829206661696c656460448201526064016107d9565b60006145c482615064565b90506145d08142614e17565b94505050505090565b603880546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038083166000908152607360205260408082208484168352908220600482015492939192909116806146be5760405162461bcd60e51b815260206004820152600e60248201527f4e6f74496e4368616c6c656e676500000000000000000000000000000000000060448201526064016107d9565b60048201546001600160a01b0382811691161461471d5760405162461bcd60e51b815260206004820152601460248201527f496e446966666572656e744368616c6c656e676500000000000000000000000060448201526064016107d9565b95945050505050565b607280549060006147368361510a565b90915550506001600160a01b03908116600090815260736020908152604080832060038101805482547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016835560018301869055600283018690557fffffffffffffffffffffffff00000000000000000000000000000000000000008082169092556004909201805482169055941683526074909152902080549091169055565b611e148061514083390190565b50805460008255600202906000526020600020908101906119e091905b8082111561483e5780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201614801565b5090565b60006020828403121561485457600080fd5b5035919050565b806040810183101561146657600080fd5b6000806080838503121561487f57600080fd5b614889848461485b565b9150614898846040850161485b565b90509250929050565b6001600160a01b03811681146119e057600080fd5b80356148c1816148a1565b919050565b6000602082840312156148d857600080fd5b81356148e3816148a1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561493c5761493c6148ea565b60405290565b600067ffffffffffffffff8084111561495d5761495d6148ea565b604051601f8501601f19908116603f01168101908282118183101715614985576149856148ea565b8160405280935085815286868601111561499e57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156149ca57600080fd5b813567ffffffffffffffff8111156149e157600080fd5b8201601f810184136149f257600080fd5b614a0184823560208401614942565b949350505050565b60008083601f840112614a1b57600080fd5b50813567ffffffffffffffff811115614a3357600080fd5b6020830191508360208260051b8501011115614a4e57600080fd5b9250929050565b600080600080600080600060a0888a031215614a7057600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115614a9657600080fd5b614aa28b838c01614a09565b909750955060608a0135945060808a0135915080821115614ac257600080fd5b818a0191508a601f830112614ad657600080fd5b813581811115614ae557600080fd5b8b6020828501011115614af757600080fd5b60208301945080935050505092959891949750929550565b60008060208385031215614b2257600080fd5b823567ffffffffffffffff811115614b3957600080fd5b614b4585828601614a09565b90969095509350505050565b60008060408385031215614b6457600080fd5b823591506020830135614b76816148a1565b809150509250929050565b60008060408385031215614b9457600080fd5b50508035926020909101359150565b6000806000806000806000806000806000806101408d8f031215614bc657600080fd5b614bcf8d6148b6565b9b50614bdd60208e016148b6565b9a50614beb60408e016148b6565b9950614bf960608e016148b6565b9850614c0760808e016148b6565b975060a08d0135965060c08d0135955060e08d0135945067ffffffffffffffff6101008e01351115614c3857600080fd5b614c498e6101008f01358f01614a09565b909450925067ffffffffffffffff6101208e01351115614c6857600080fd5b614c798e6101208f01358f01614a09565b81935080925050509295989b509295989b509295989b565b600082601f830112614ca257600080fd5b6148e383833560208501614942565b600080600060608486031215614cc657600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614ceb57600080fd5b614cf786828701614c91565b9150509250925092565b600060208284031215614d1357600080fd5b813567ffffffffffffffff80821115614d2b57600080fd5b9083019060c08286031215614d3f57600080fd5b614d47614919565b82358152602083013560208201526040830135604082015260608301356060820152608083013582811115614d7b57600080fd5b614d8787828601614c91565b60808301525060a083013582811115614d9f57600080fd5b614dab87828601614c91565b60a08301525095945050505050565b60008060408385031215614dcd57600080fd5b8235614dd8816148a1565b91506020830135614b76816148a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614e2a57614e2a614de8565b500190565b600060208284031215614e4157600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e7a57614e7a614de8565b5060010190565b600082821015614e9357614e93614de8565b500390565b600060208284031215614eaa57600080fd5b815180151581146148e357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811015614f04578181015183820152602001614eec565b83811115611e7a5750506000910152565b60008151808452614f2d816020860160208601614ee9565b601f01601f19169290920160200192915050565b6020815260006148e36020830184614f15565b600060208284031215614f6657600080fd5b81516148e3816148a1565b6060815284606082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115614faa57600080fd5b8560051b80886080850137602083018690528201828103608090810160408501528101849052838560a0830137600060a0858301015260a0601f19601f8601168201019150509695505050505050565b6000825161500c818460208701614ee9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b83815282602082015260606040820152600061471d6060830184614f15565b805160208083015191908110156150a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160c060a08401526150ed60e0840182614f15565b905060a0840151601f198483030160c085015261471d8282614f15565b60008161511957615119614de8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe608060405234801561001057600080fd5b50611df4806100206000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638b299903116100d8578063dfbf53ae1161008c578063f03a7fcb11610066578063f03a7fcb1461034c578063f2858aa31461035f578063faeff41b1461037257600080fd5b8063dfbf53ae1461031b578063e87e35891461033b578063ed5b13031461034357600080fd5b80639afd9d78116100bd5780639afd9d78146102c0578063abf48013146102f5578063afeae9651461030857600080fd5b80638b299903146102935780638f2400a8146102ad57600080fd5b8063631acced1161012f578063732e696111610114578063732e6961146102145780637f4c91c51461026b5780638a8cd2181461028b57600080fd5b8063631acced1461020457806370dea79a1461020c57600080fd5b806341e8510c1161016057806341e8510c146101ad578063534db0e2146101b65780635f41e3d6146101fb57600080fd5b806318ef160d1461017c5780632a51f6f714610191575b600080fd5b61018f61018a366004611732565b61037b565b005b61019a60085481565b6040519081526020015b60405180910390f35b61019a60065481565b6003546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a4565b61019a60055481565b61018f6106ad565b61018f610759565b6010546011546012546013546014546015546016546102369695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101a4565b6002546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b6101d66107f9565b6007546102a09060ff1681565b6040516101a49190611783565b61018f6102bb36600461179d565b6108bb565b600e546102e59074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101a4565b61018f610303366004611821565b610d4a565b61019a610316366004611898565b610f0e565b600e546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b61019a610f25565b61019a60045481565b61018f61035a3660046118fa565b610f73565b61018f61036d36600461199e565b6112e1565b61019a600f5481565b6103836107f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f4249535f53454e444552000000000000000000000000000000000000000000008152509061040e5760405162461bcd60e51b815260040161040591906119c7565b60405180910390fd5b50610417610f25565b6004546104249042611a3a565b11156040518060400160405280600c81526020017f4249535f444541444c494e4500000000000000000000000000000000000000008152509061047a5760405162461bcd60e51b815260040161040591906119c7565b5060085460408051808201909152600f81527f4348414c5f494e49545f53544154450000000000000000000000000000000000602082015290156104d15760405162461bcd60e51b815260040161040591906119c7565b50600081116105225760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f4e554d5f53544550530000000000000000000000000000006044820152606401610405565b604080516000602080830191909152818301849052825180830384018152606090920190925280519101206008556040805160e08082018352600c548083526020808401879052600d54848601819052436060808701829052426080808901829052600060a0808b0182905260c09a8b018d9052601089905560118e9055601287905560138690556014849055601582905560168d90558b519889529688018d90529987019490945290850191909152908301528101939093529082018390527f71809f4d4f7bf3c208a85ccd3c922c984024f8e3cef51e3d03ae677e4217097d910160405180910390a1600160075460ff16600281111561062657610626611754565b141561065b576004546106399042611a3a565b6006546106469190611a3a565b6006556007805460ff191660021790556106a5565b600260075460ff16600281111561067457610674611754565b14156106a5576004546106879042611a3a565b6005546106949190611a3a565b6005556007805460ff191660011790555b505042600455565b600e5474010000000000000000000000000000000000000000900460ff16156107185760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f5345545f524f4c4c4241434b0000000000000000000000006044820152606401610405565b600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b610761610f25565b60045461076e9042611a3a565b116040518060400160405280601081526020017f54494d454f55545f444541444c494e4500000000000000000000000000000000815250906107c35760405162461bcd60e51b815260040161040591906119c7565b50600260075460ff1660028111156107dd576107dd611754565b14156107ef576107ed6001611584565b565b6107ed600161160c565b6000600260075460ff16600281111561081457610814611754565b1415610837575060025473ffffffffffffffffffffffffffffffffffffffff1690565b600160075460ff16600281111561085057610850611754565b1415610873575060035473ffffffffffffffffffffffffffffffffffffffff1690565b60405162461bcd60e51b815260206004820152600760248201527f4e4f5f5455524e000000000000000000000000000000000000000000000000006044820152606401610405565b6108c36107f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f4249535f53454e44455200000000000000000000000000000000000000000000815250906109455760405162461bcd60e51b815260040161040591906119c7565b5061094e610f25565b60045461095b9042611a3a565b11156040518060400160405280600c81526020017f4249535f444541444c494e450000000000000000000000000000000000000000815250906109b15760405162461bcd60e51b815260040161040591906119c7565b50600854610a015760405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494e495449414c495a454400000000000000000000000000000000006044820152606401610405565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060085481146040518060400160405280600881526020017f4249535f5052455600000000000000000000000000000000000000000000000081525090610a825760405162461bcd60e51b815260040161040591906119c7565b50600a5415610aea5760095487351480610a9e5750600a548735145b610aea5760405162461bcd60e51b815260206004820152600f60248201527f414d424947554f55535f535441525400000000000000000000000000000000006044820152606401610405565b600b5460408801351415610b405760405162461bcd60e51b815260206004820152600b60248201527f494e56414c49445f454e440000000000000000000000000000000000000000006044820152606401610405565b60008411610b905760405162461bcd60e51b815260206004820152600960248201527f544f4f5f53484f525400000000000000000000000000000000000000000000006044820152606401610405565b8635600955602080880135600a55604080890135600b558051808301889052808201879052815180820383018152606090910190915280519101206008556040805160e081018252883581526020808a0135908201529081018860026020908102919091013582524382820181905242604080850182905260608086018c905260809586018b905286516010558685015160115586820151601255868101516013558686015160145560a08088015160155560c09788015160165582518f3581528f870135968101969096528e8301358684015290850193909352938301528101889052918201869052517f71809f4d4f7bf3c208a85ccd3c922c984024f8e3cef51e3d03ae677e4217097d9181900360e00190a150600160075460ff166002811115610cbf57610cbf611754565b1415610cf457600454610cd29042611a3a565b600654610cdf9190611a3a565b6006556007805460ff19166002179055610d3e565b600260075460ff166002811115610d0d57610d0d611754565b1415610d3e57600454610d209042611a3a565b600554610d2d9190611a3a565b6005556007805460ff191660011790555b50504260045550505050565b600060075460ff166002811115610d6357610d63611754565b146040518060400160405280600f81526020017f4348414c5f494e49545f5354415445000000000000000000000000000000000081525090610db85760405162461bcd60e51b815260040161040591906119c7565b5073ffffffffffffffffffffffffffffffffffffffff871615801590610df3575073ffffffffffffffffffffffffffffffffffffffff861615155b8015610e14575073ffffffffffffffffffffffffffffffffffffffff841615155b610e605760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610405565b600280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff998a16178255600380548216988a1698909817909755600180548816968916969096179095556000805490961693909616929092178455600c829055600d8590556007805460ff19169093179092554260045560966005819055600655600955600a91909155600b91909155600f55565b60098160038110610f1e57600080fd5b0154905081565b6000600260075460ff166002811115610f4057610f40611754565b1415610f4d575060055490565b600160075460ff166002811115610f6657610f66611754565b1415610873575060065490565b610f7b6107f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f4249535f53454e4445520000000000000000000000000000000000000000000081525090610ffd5760405162461bcd60e51b815260040161040591906119c7565b50611006610f25565b6004546110139042611a3a565b11156040518060400160405280600c81526020017f4249535f444541444c494e450000000000000000000000000000000000000000815250906110695760405162461bcd60e51b815260040161040591906119c7565b506040805160208082018590528183018490528251808303840181526060909201909252805191012060085481146040518060400160405280600881526020017f4249535f50524556000000000000000000000000000000000000000000000000815250906110eb5760405162461bcd60e51b815260040161040591906119c7565b5060016110f9600284611aa7565b11156111475760405162461bcd60e51b815260206004820152601460248201527f424953454354494f4e5f494e434f4d504c4554450000000000000000000000006044820152606401610405565b6001805460009173ffffffffffffffffffffffffffffffffffffffff9091169063625eb72e908b908b9060099061117e908b611a3a565b6003811061118e5761118e611a78565b01548b8b6040518663ffffffff1660e01b81526004016111b2959493929190611ca2565b60206040518083038186803b1580156111ca57600080fd5b505afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190611d62565b90506009856003811061121757611217611a78565b015481141561122f5761122a6000611689565b611239565b6112396000611701565b506001905060075460ff16600281111561125557611255611754565b141561128a576004546112689042611a3a565b6006546112759190611a3a565b6006556007805460ff191660021790556112d4565b600260075460ff1660028111156112a3576112a3611754565b14156112d4576004546112b69042611a3a565b6005546112c39190611a3a565b6005556007805460ff191660011790555b5050426004555050505050565b60025473ffffffffffffffffffffffffffffffffffffffff166113465760405162461bcd60e51b815260206004820152601060248201527f446566656e646572206e6f7420736574000000000000000000000000000000006044820152606401610405565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113ad5760405162461bcd60e51b815260206004820152601360248201527f43616c6c6572206e6f7420646566656e646572000000000000000000000000006044820152606401610405565b600e5473ffffffffffffffffffffffffffffffffffffffff166114125760405162461bcd60e51b815260206004820152601260248201527f446f206e6f7420686176652077696e6e657200000000000000000000000000006044820152606401610405565b600354600e5473ffffffffffffffffffffffffffffffffffffffff9081169116141561151c5780156114d4576000546003546002546040517ffa7803e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169063fa7803e6906044015b600060405180830381600087803b1580156114b957600080fd5b505af11580156114cd573d6000803e3d6000fd5b5050505050565b600254600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b6000546002546003546040517ffa7803e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169063fa7803e69060440161149f565b50565b600354600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556002546040517f03f929a9a6b1f0aef5e43cb12b56f862da97ec3de3fda02a52e85f9f3974fb6a93611601939216908590611d7b565b60405180910390a150565b600254600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556003546040517f03f929a9a6b1f0aef5e43cb12b56f862da97ec3de3fda02a52e85f9f3974fb6a93611601939216908590611d7b565b600260075460ff1660028111156116a2576116a2611754565b14156116b1576115818161160c565b600354600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905561158181611584565b600260075460ff16600281111561171a5761171a611754565b14156117295761158181611584565b6115818161160c565b6000806040838503121561174557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061179757611797611754565b91905290565b60008060008060008061010087890312156117b757600080fd5b60608701888111156117c857600080fd5b969896359750505060808701359460a0880135945060c0880135935060e088013592509050565b73ffffffffffffffffffffffffffffffffffffffff8116811461158157600080fd5b803561181c816117ef565b919050565b600080600080600080600060e0888a03121561183c57600080fd5b8735611847816117ef565b96506020880135611857816117ef565b95506040880135611867816117ef565b94506060880135611877816117ef565b9699959850939660808101359560a0820135955060c0909101359350915050565b6000602082840312156118aa57600080fd5b5035919050565b60008083601f8401126118c357600080fd5b50813567ffffffffffffffff8111156118db57600080fd5b6020830191508360208285010111156118f357600080fd5b9250929050565b600080600080600080600060c0888a03121561191557600080fd5b873567ffffffffffffffff8082111561192d57600080fd5b9089019060e0828c03121561194157600080fd5b90975060208901359060ff8216821461195957600080fd5b9096506040890135908082111561196f57600080fd5b5061197c8a828b016118b1565b989b979a50986060810135976080820135975060a09091013595509350505050565b6000602082840312156119b057600080fd5b813580151581146119c057600080fd5b9392505050565b600060208083528351808285015260005b818110156119f4578581018301518582016040015282016119d8565b81811115611a06576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082821015611a73577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082611add577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee1833603018112611b1657600080fd5b90910192915050565b803567ffffffffffffffff8116811461181c57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b6c57600080fd5b830160208101925035905067ffffffffffffffff811115611b8c57600080fd5b8036038313156118f357600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061012067ffffffffffffffff611bfb84611b1f565b16845260208301356020850152611c1460408401611b1f565b67ffffffffffffffff166040850152611c2f60608401611811565b73ffffffffffffffffffffffffffffffffffffffff16606085015260808381013590850152611c6160a0840184611b37565b8260a0870152611c748387018284611b9b565b9250505060c083013560c085015260e083013560e08501526101008084013581860152508091505092915050565b6080815260008635611cb3816117ef565b73ffffffffffffffffffffffffffffffffffffffff9081166080840152602088013560a0840152604088013560c0840152606088013590611cf3826117ef565b1660e0830152611d066080880188611ae2565b60e0610100840152611d1c610160840182611be4565b60a089013561012085015260c089013561014085015260ff8816602085015290508560408401528281036060840152611d56818587611b9b565b98975050505050505050565b600060208284031215611d7457600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8481168252831660208201526060810160028310611db057611db0611754565b82604083015294935050505056fea2646970667358221220ca61e68cc8f6420782d8eb6049d6154648a92ef0dbac703ec1e96c1168fdec1a64736f6c63430008090033a264697066735822122055e961978528e625060774bb3dea305c3279322fde77d0314a9ca628b175120064736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102f45760003560e01c80636aabc35011610191578063b553ee84116100e3578063cfc5901d11610097578063f2fde38b11610071578063f2fde38b14610707578063fa7803e61461071a578063fe2ba8481461072d57600080fd5b8063cfc5901d146106c1578063de574efc146106d4578063e03c8632146106e757600080fd5b8063c8525c3e116100c8578063c8525c3e14610693578063c94b5847146106a6578063c97a5919146106ae57600080fd5b8063b553ee8414610677578063b6da898f1461068057600080fd5b80638c669739116101455780639efbea231161011f5780639efbea2314610648578063a56ba93b1461065b578063aca9a5181461066457600080fd5b80638c669739146105aa5780638da5cb5b146105b25780639168ae72146105c557600080fd5b80637112955911610176578063711295591461057b5780637acb7757146105845780638821b2ae1461059757600080fd5b80636aabc350146105495780636c8b052a1461057257600080fd5b806330b260751161024a578063461a4478116101fe57806351ed6a30116101d857806351ed6a30146104e75780636177fd18146104fa5780636a3685611461053657600080fd5b8063461a4478146104b957806349cd3004146104cc5780634d26732d146104df57600080fd5b80633ccfd60b1161022f5780633ccfd60b1461049557806340d9224b1461049d57806345e38b64146104b057600080fd5b806330b260751461047a57806337d1fbdd1461048257600080fd5b80632aa234f6116102ac5780632f06d1b0116102865780632f06d1b0146104275780632f30cabd1461043a578063300a71611461045a57600080fd5b80632aa234f6146103ee5780632b7ac3f3146104015780632e17de781461041457600080fd5b80632052465e116102dd5780632052465e146103875780632906040e146103b9578063299ca478146103c357600080fd5b80630e456acf146102f9578063107035a414610370575b600080fd5b607754607854607954607a54607b5461032c9460ff8116946001600160a01b036101009092048216949082169391169186565b6040805196151587526001600160a01b0395861660208801529385169386019390935292166060840152608083019190915260a082015260c0015b60405180910390f35b61037960715481565b604051908152602001610367565b61039a610395366004614842565b610740565b604080516001600160a01b039093168352602083019190915201610367565b6103c1610778565b005b6000546103d6906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b6103d66103fc366004614842565b610aba565b6005546103d6906001600160a01b031681565b6103c1610422366004614842565b610ae4565b6103d661043536600461486c565b610cb9565b6103796104483660046148c6565b60756020526000908152604090205481565b6103796104683660046148c6565b60396020526000908152604090205481565b6103c161146c565b6103d6610490366004614842565b61186a565b6103c161187a565b6004546103d6906001600160a01b031681565b61037960015481565b6103d66104c73660046149b8565b6119e3565b6103c16104da366004614a55565b611a7d565b600254610379565b6003546103d6906001600160a01b031681565b6105266105083660046148c6565b6001600160a01b031660009081526073602052604090205460ff1690565b6040519015158152602001610367565b6103c1610544366004614b0f565b611d3e565b6103d66105573660046148c6565b6074602052600090815260409020546001600160a01b031681565b61037960725481565b61037960025481565b6103c1610592366004614b51565b611e80565b6103c16105a5366004614842565b612318565b6103c16124f9565b6038546103d6906001600160a01b031681565b6106126105d33660046148c6565b6073602052600090815260409020805460018201546002830154600384015460049094015460ff90931693919290916001600160a01b03908116911685565b6040805195151586526020860194909452928401919091526001600160a01b03908116606084015216608082015260a001610367565b6103c1610656366004614b0f565b61256c565b61037960705481565b6103c1610672366004614b0f565b6127ae565b610379606f5481565b6103c161068e366004614b81565b6129f0565b6103c16106a1366004614b0f565b612e46565b610379612f82565b6103c16106bc366004614ba3565b613020565b6103c16106cf366004614cb1565b613545565b6103c16106e2366004614d01565b6136f8565b6103796106f53660046148c6565b603b6020526000908152604090205481565b6103c16107153660046148c6565b613c2f565b6103c1610728366004614dba565b613d0e565b6103c161073b3660046148c6565b613fdf565b6076818154811061075057600080fd5b6000918252602090912060029091020180546001909101546001600160a01b03909116915082565b336000908152607460205260409020546001600160a01b03166107e25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064015b60405180910390fd5b607154606f54106108355760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000607254116108875760405162461bcd60e51b815260206004820152600860248201527f4e6f5374616b657200000000000000000000000000000000000000000000000060448201526064016107d9565b6000606f5460016108989190614e17565b600480546040517f828622750000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916382862275916108e59185910190815260200190565b60206040518083038186803b1580156108fd57600080fd5b505afa158015610911573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109359190614e2f565b4210156109845760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b607054600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b0316906330b947709060240160206040518083038186803b1580156109e257600080fd5b505afa1580156109f6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1a9190614e2f565b14610a675760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964506172656e740000000000000000000000000000000000000060448201526064016107d9565b606f8054906000610a7783614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150565b603a8181548110610aca57600080fd5b6000918252602090912001546001600160a01b0316905081565b610aed336141a9565b33600090815260736020526040902060705460028201541115610b525760405162461bcd60e51b815260206004820152601c60248201527f5374616b65644f6e556e636f6e6669726d6564417373657274696f6e0000000060448201526064016107d9565b6002548160010154610b649190614e81565b821115610bb35760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b81816001016000828254610bc79190614e81565b90915550506003546040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018490526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610c3157600080fd5b505af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c699190614e98565b610cb55760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b5050565b336000908152607460205260408120546001600160a01b0316610d1e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b81356020830135808210610d745760405162461bcd60e51b815260206004820152600a60248201527f57726f6e674f726465720000000000000000000000000000000000000000000060448201526064016107d9565b607154811115610dc65760405162461bcd60e51b815260206004820152601360248201527f556e70726f706f736564417373657274696f6e0000000000000000000000000060448201526064016107d9565b8160705410610e175760405162461bcd60e51b815260206004820152601860248201527f417373657274696f6e416c72656164795265736f6c766564000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018490526000916001600160a01b03909116906330b947709060240160206040518083038186803b158015610e7757600080fd5b505afa158015610e8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eaf9190614e2f565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529293506001600160a01b0316916330b9477091610efc9186910190815260200190565b60206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614e2f565b8114610f9a5760405162461bcd60e51b815260206004820152600f60248201527f446966666572656e74506172656e74000000000000000000000000000000000060448201526064016107d9565b6000610fa960208801886148c6565b90506000610fbd6040890160208a016148c6565b9050806001600160a01b0316826001600160a01b031614156110475760405162461bcd60e51b815260206004820152602560248201527f646566656e64657220616e64206368616c6c656e6765206d757374206e6f742060448201527f657175616c00000000000000000000000000000000000000000000000000000060648201526084016107d9565b6001600160a01b03808316600090815260746020526040808220548484168352912054908216911661107882614211565b61108181614211565b600060405161108f906147d7565b604051809103906000f0801580156110ab573d6000803e3d6000fd5b506001600160a01b038084166000908152607360209081526040808320600490810180548688167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092558a871686528386209092018054831682179055825160c0810184529485529284018390528a8516848301819052948a1660608501819052608085018f905260a09094018d905260778054610100949094027fffffffffffffffffffffff00000000000000000000000000000000000000000090941693909317909255607880548316909417909355607980549091169091179055607a8a9055607b8990555190915081907fd0ebe74b4f7d89a9b0fdc9d95f887a7b925c6c7300b5c4b2c3304d97925840fa906111e0908b9084909182526001600160a01b0316602082015260400190565b60405180910390a1600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018990526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b15801561124857600080fd5b505afa15801561125c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112809190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018b90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b1580156112e157600080fd5b505afa1580156112f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113199190614e2f565b600480546040517f54823e660000000000000000000000000000000000000000000000000000000081529182018e90529192506000916001600160a01b0316906354823e669060240160206040518083038186803b15801561137a57600080fd5b505afa15801561138e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b29190614e2f565b6005546040517fabf480130000000000000000000000000000000000000000000000000000000081526001600160a01b038c811660048301528b8116602483015291821660448201523060648201526084810186905260a4810185905260c4810183905291925086169063abf480139060e401600060405180830381600087803b15801561143f57600080fd5b505af1158015611453573d6000803e3d6000fd5b50959e5050505050505050505050505050505b92915050565b336000908152607460205260409020546001600160a01b03166114d15760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b607154606f54106115245760405162461bcd60e51b815260206004820152601560248201527f4e6f556e7265736f6c766564417373657274696f6e000000000000000000000060448201526064016107d9565b6000606f5460016115359190614e17565b607054600480546040517f30b9477000000000000000000000000000000000000000000000000000000000815291820184905292935090916001600160a01b0316906330b947709060240160206040518083038186803b15801561159857600080fd5b505afa1580156115ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d09190614e2f565b14156117a157600480546040517f828622750000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b03169063828622759060240160206040518083038186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190614e2f565b4210156116b85760405162461bcd60e51b815260206004820152601660248201527f4368616c6c656e6765506572696f6450656e64696e670000000000000000000060448201526064016107d9565b6116c181614285565b600480546040517f366b2b690000000000000000000000000000000000000000000000000000000081529182018490526001600160a01b03169063366b2b699060240160206040518083038186803b15801561171c57600080fd5b505afa158015611730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117549190614e2f565b146117a15760405162461bcd60e51b815260206004820152600e60248201527f5374616b65727350726573656e7400000000000000000000000000000000000060448201526064016107d9565b606f80549060006117b183614e48565b91905055507f5b24ab8ceb442373727ac5c559a027521cb52db451c74710ebed9faa5fe15a7c606f546040516117e991815260200190565b60405180910390a160048054606f546040517fd8a4e5af000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063d8a4e5af90602401600060405180830381600087803b15801561184f57600080fd5b505af1158015611863573d6000803e3d6000fd5b5050505050565b603c8181548110610aca57600080fd5b336000908152607460205260409020546001600160a01b03166118df5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b33600081815260756020526040808220805492905560035490517fa9059cbb00000000000000000000000000000000000000000000000000000000815260048101939093526024830182905290916001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561195c57600080fd5b505af1158015611970573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119949190614e98565b6119e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b50565b600080546040517fbf40fac10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063bf40fac190611a2d908590600401614f41565b60206040518083038186803b158015611a4557600080fd5b505afa158015611a59573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114669190614f54565b336000908152607460205260409020546001600160a01b0316611ae25760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b611b206040518060400160405280600c81526020017f42564d5f526f6c6c7570657200000000000000000000000000000000000000008152506119e3565b6001600160a01b0316336001600160a01b031614611ba65760405162461bcd60e51b815260206004820152603560248201527f6d73672e73656e646572206973206e6f7420726f6c6c75702070726f706f736560448201527f722c2063616e277420617070656e64206261746368000000000000000000000060648201526084016107d9565b611bb087876129f0565b6000611bf06040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b90506000816001600160a01b03168787878787604051602401611c17959493929190614f71565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f2169f79f0000000000000000000000000000000000000000000000000000000017905251611c7a9190614ffa565b6000604051808303816000865af19150503d8060008114611cb7576040519150601f19603f3d011682016040523d82523d6000602084013e611cbc565b606091505b5050905080611d335760405162461bcd60e51b815260206004820152602960248201527f73636320617070656e64207374617465206261746368206661696c65642c207260448201527f657665727420616c6c000000000000000000000000000000000000000000000060648201526084016107d9565b505050505050505050565b6038546001600160a01b03163314611d985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603a5460005b82811015611e7a57611db08183614e17565b60396000868685818110611dc657611dc6614eba565b9050602002016020810190611ddb91906148c6565b6001600160a01b03168152602081019190915260400160002055603a848483818110611e0957611e09614eba565b9050602002016020810190611e1e91906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580611e7281614e48565b915050611d9e565b50505050565b33600081815260396020526040902054603a80548392908110611ea557611ea5614eba565b6000918252602090912001546001600160a01b031614611f075760405162461bcd60e51b815260206004820152601760248201527f4e4f545f494e5f5354414b45525f57484954454c49535400000000000000000060448201526064016107d9565b6001600160a01b0382166000818152603b6020526040902054603c8054859392908110611f3657611f36614eba565b6000918252602090912001546001600160a01b031614611f985760405162461bcd60e51b815260206004820152601960248201527f4e4f545f494e5f4f50455241544f525f57484954454c4953540000000000000060448201526064016107d9565b6003546040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561200357600080fd5b505af1158015612017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203b9190614e98565b6120875760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b3360009081526073602052604090205460ff161561215f57336000908152607360205260409020600301546001600160a01b038481169116146121325760405162461bcd60e51b815260206004820152602560248201527f7374616b6572203d3e206f70657261746f72206d617070696e67206e6f74207560448201527f6e6971756500000000000000000000000000000000000000000000000000000060648201526084016107d9565b3360009081526073602052604081206001018054869290612154908490614e17565b90915550611e7a9050565b6001600160a01b0383811660009081526074602052604090205416156121c75760405162461bcd60e51b815260206004820152601460248201527f6f70657261746f72206973206f6363757069656400000000000000000000000060448201526064016107d9565b6002548410156122195760405162461bcd60e51b815260206004820152601160248201527f496e73756666696369656e745374616b6500000000000000000000000000000060448201526064016107d9565b6040805160a0810182526001808252602080830188815260008486018181526001600160a01b03808b16606088018181526080890185815233808752607389528b87209a518b549015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116178b559651988a01989098559251600289015591516003880180549183167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055955160049097018054979091169686169690961790955593845260749091529282208054909116909217909155607280549161230783614e48565b9190505550611e7a33607054614391565b336000908152607460205260409020546001600160a01b031661237d5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b031680845260739092529091206002810154831115806123b8575060715483115b156124055760405162461bcd60e51b815260206004820152601360248201527f417373657274696f6e4f75744f6652616e67650000000000000000000000000060448201526064016107d9565b600480546040517f30b947700000000000000000000000000000000000000000000000000000000081529182018590526001600160a01b0316906330b947709060240160206040518083038186803b15801561246057600080fd5b505afa158015612474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124989190614e2f565b8160020154146124ea5760405162461bcd60e51b815260206004820152601760248201527f506172656e74417373657274696f6e556e7374616b656400000000000000000060448201526064016107d9565b6124f48284614391565b505050565b336000908152607460205260409020546001600160a01b031661255e5760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b61256a607660006147e4565b565b6038546001600160a01b031633146125c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f4576000603b60008585858181106125e9576125e9614eba565b90506020020160208101906125fe91906148c6565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905080603b6000603c6001603c8054905061263a9190614e81565b8154811061264a5761264a614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603c805461267f90600190614e81565b8154811061268f5761268f614eba565b600091825260209091200154603c80546001600160a01b0390921691839081106126bb576126bb614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603c8054806126fa576126fa615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055909101909155603b9085858581811061276a5761276a614eba565b905060200201602081019061277f91906148c6565b6001600160a01b03168152602081019190915260400160009081205550806127a681614e48565b9150506125c9565b6038546001600160a01b031633146128085760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60005b818110156124f45760006039600085858581811061282b5761282b614eba565b905060200201602081019061284091906148c6565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508060396000603a6001603a8054905061287c9190614e81565b8154811061288c5761288c614eba565b60009182526020808320909101546001600160a01b03168352820192909252604001902055603a80546128c190600190614e81565b815481106128d1576128d1614eba565b600091825260209091200154603a80546001600160a01b0390921691839081106128fd576128fd614eba565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550603a80548061293c5761293c615016565b60008281526020812082017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559091019091556039908585858181106129ac576129ac614eba565b90506020020160208101906129c191906148c6565b6001600160a01b03168152602081019190915260400160009081205550806129e881614e48565b91505061280b565b336000908152607460205260409020546001600160a01b0316612a555760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b336000908152607460209081526040808320546001600160a01b03908116808552607390935292206004015490911615612af75760405162461bcd60e51b815260206004820152603160248201527f63616e206e6f742063726561746520617373657274696f6e207768656e20737460448201527f616b657220696e206368616c6c656e676500000000000000000000000000000060648201526084016107d9565b6001600160a01b0381811660009081526073602052604090819020600201546001546004805493517f4e04886d000000000000000000000000000000000000000000000000000000008152908101839052919390921690634e04886d9060240160206040518083038186803b158015612b6f57600080fd5b505afa158015612b83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ba79190614e2f565b612bb19043614e81565b1015612bff5760405162461bcd60e51b815260206004820152601f60248201527f4d696e696d756d417373657274696f6e506572696f644e6f745061737365640060448201526064016107d9565b600480546040517f2b27e93b0000000000000000000000000000000000000000000000000000000081529182018390526001600160a01b031690632b27e93b9060240160206040518083038186803b158015612c5a57600080fd5b505afa158015612c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c929190614e2f565b8311612ce05760405162461bcd60e51b815260206004820152600e60248201527f456d707479417373657274696f6e00000000000000000000000000000000000060448201526064016107d9565b60718054906000612cf083614e48565b9091555050607154604080519182523360208301528101859052606081018490527f5c610f28399ecc14b66149012a0197a5e3257a8c397125afee95d1cf4b9507349060800160405180910390a16004546071546001600160a01b0390911690634228158490868685612d6161446f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b50505050612df082607154614391565b606f8054906000612e0083614e48565b9091555050606f5460708190556040519081527f453430d123684340024ae0a229704bdab39c93dc48bb5a0b4bc83142d95d48ef9060200160405180910390a150505050565b6038546001600160a01b03163314612ea05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b603c5460005b82811015611e7a57612eb88183614e17565b603b6000868685818110612ece57612ece614eba565b9050602002016020810190612ee391906148c6565b6001600160a01b03168152602081019190915260400160002055603c848483818110612f1157612f11614eba565b9050602002016020810190612f2691906148c6565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580612f7a81614e48565b915050612ea6565b600480546070546040517f2b27e93b000000000000000000000000000000000000000000000000000000008152928301526000916001600160a01b0390911690632b27e93b9060240160206040518083038186803b158015612fe357600080fd5b505afa158015612ff7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061301b9190614e2f565b905090565b6000547501000000000000000000000000000000000000000000900460ff161580801561306b575060005460017401000000000000000000000000000000000000000090910460ff16105b8061309d5750303b15801561309d575060005474010000000000000000000000000000000000000000900460ff166001145b61310f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107d9565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561319557600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6001600160a01b038d1615806131b257506001600160a01b038c16155b156131ff5760405162461bcd60e51b815260206004820152600b60248201527f5a65726f4164647265737300000000000000000000000000000000000000000060448201526064016107d9565b8c603860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a600360006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b600560006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060006001600160a01b031660008054906101000a90046001600160a01b03166001600160a01b0316146132e95760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c81169190911790915560045416156133725760405162461bcd60e51b815260206004820152601460248201527f526564756e64616e74496e697469616c697a656400000000000000000000000060448201526064016107d9565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b16908117825560018a905560028990556040517f07663706000000000000000000000000000000000000000000000000000000008152309281019290925290630766370690602401600060405180830381600087803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b50506000606f81905560708190556071819055600480546040517f42281584000000000000000000000000000000000000000000000000000000008152918201839052602482018b90526044820183905260648201929092524360848201526001600160a01b0390911692506342281584915060a401600060405180830381600087803b1580156134a757600080fd5b505af11580156134bb573d6000803e3d6000fd5b505050506134c98585611d3e565b6134d38383612e46565b801561353657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050505050565b6038546001600160a01b0316331461359f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60006135df6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b90506000816001600160a01b031685858560405160240161360293929190615045565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0bf3b5f200000000000000000000000000000000000000000000000000000000179052516136659190614ffa565b6000604051808303816000865af19150503d80600081146136a2576040519150601f19603f3d011682016040523d82523d6000602084013e6136a7565b606091505b50509050806118635760405162461bcd60e51b815260206004820152601b60248201527f63616c6c20726f6c6c4261636b4c32436861696e206661696c6564000000000060448201526064016107d9565b6038546001600160a01b031633146137525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b60006137926040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe561dddc0000000000000000000000000000000000000000000000000000000017905290519192506000916001600160a01b0384169161380491614ffa565b6000604051808303816000865af19150503d8060008114613841576040519150601f19603f3d011682016040523d82523d6000602084013e613846565b606091505b5091505060008161385690615064565b84519091506138659082614e81565b6001146138d95760405162461bcd60e51b8152602060048201526024808201527f64656c657465206261746368207769746820676170206973206e6f7420616c6c60448201527f6f7765640000000000000000000000000000000000000000000000000000000060648201526084016107d9565b6000836001600160a01b0316856040516024016138f691906150a9565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5b4d90e200000000000000000000000000000000000000000000000000000000179052516139599190614ffa565b6000604051808303816000865af19150503d8060008114613996576040519150601f19603f3d011682016040523d82523d6000602084013e61399b565b606091505b5050905080613a125760405162461bcd60e51b815260206004820152602960248201527f7363632064656c657465207374617465206261746368206661696c65642c207260448201527f657665727420616c6c000000000000000000000000000000000000000000000060648201526084016107d9565b606f546071541015613a8c5760405162461bcd60e51b815260206004820152602e60248201527f64656c65746520617373657274696f6e206265666f7265206c6173742072657360448201527f6f6c76656420696e206572726f7200000000000000000000000000000000000060648201526084016107d9565b7f5b24ab8ceb442373727ac5c559a027521cb52db451c74710ebed9faa5fe15a7c607154604051613abf91815260200190565b60405180910390a1600480546071546040517fd0087d61000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063d0087d6190602401600060405180830381600087803b158015613b2557600080fd5b505af1158015613b39573d6000803e3d6000fd5b505060718054925090506000613b4e8361510a565b9091555050606f8054906000613b638361510a565b909155505060708054906000613b788361510a565b919050555060005b603a54811015613c275760715460736000603a8481548110613ba457613ba4614eba565b60009182526020808320909101546001600160a01b031683528201929092526040019020600201541115613c155760715460736000603a8481548110613bec57613bec614eba565b60009182526020808320909101546001600160a01b031683528201929092526040019020600201555b80613c1f81614e48565b915050613b80565b505050505050565b6038546001600160a01b03163314613c895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b6001600160a01b038116613d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107d9565b6119e0816145d9565b336000908152607460205260409020546001600160a01b0316613d735760405162461bcd60e51b815260206004820152600b60248201527f4e6f744f70657261746f7200000000000000000000000000000000000000000060448201526064016107d9565b6001600160a01b038083166000908152607460205260408082205484841683529120549082169116613da4816141a9565b6000613db08383614643565b9050336001600160a01b03821614613e0a5760405162461bcd60e51b815260206004820152600c60248201527f4e6f744368616c6c656e6765000000000000000000000000000000000000000060448201526064016107d9565b6001600160a01b038216600090815260736020526040812060010154600254811115613e7457600254613e3d9082614e81565b6001600160a01b03851660009081526075602052604081208054909190613e65908490614e17565b90915550506002549150613e78565b8091505b6001600160a01b03851660009081526073602052604081206001018054849290613ea3908490614e17565b90915550506001600160a01b0380861660009081526073602052604080822060040180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905591861681522060020154613efe85614726565b604080518082019091526001600160a01b03958616815260208101918252607680546001808201835560009290925291517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed4600290930292830180547fffffffffffffffffffffffff000000000000000000000000000000000000000016919098161790965590517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed5909101555050607780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915550505050565b6038546001600160a01b031633146140395760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107d9565b614042816141a9565b6001600160a01b0381166000908152607360205260409020607054600282015411156140b05760405162461bcd60e51b815260206004820152601c60248201527f5374616b65644f6e556e636f6e6669726d6564417373657274696f6e0000000060448201526064016107d9565b60018101546140be83614726565b6003546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561412557600080fd5b505af1158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d9190614e98565b6124f45760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657220657263323020746f6b656e206661696c6564000000000060448201526064016107d9565b6001600160a01b03811660009081526073602052604090205460ff166119e05760405162461bcd60e51b815260206004820152600960248201527f4e6f745374616b6564000000000000000000000000000000000000000000000060448201526064016107d9565b61421a816141a9565b6001600160a01b0381811660009081526073602052604090206004015416156119e05760405162461bcd60e51b815260206004820152601060248201527f4368616c6c656e6765645374616b65720000000000000000000000000000000060448201526064016107d9565b600080805b60765481101561438a57600454607680546001600160a01b039092169163873fd089918791859081106142bf576142bf614eba565b600091825260209091206002909102015460405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101929092526001600160a01b0316602482015260440160206040518083038186803b15801561432d57600080fd5b505afa158015614341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143659190614e98565b15614378578161437481614e48565b9250505b8061438281614e48565b91505061428a565b5092915050565b6001600160a01b03828116600081815260736020526040908190206002018490556004805491517fa832c3ae00000000000000000000000000000000000000000000000000000000815290810185905260248101929092529091169063a832c3ae90604401600060405180830381600087803b15801561441057600080fd5b505af1158015614424573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590527f617d31491414a4ab2bd831e566a31837fa7fb6582921c91dffbbe83fbca789f3935001905060405180910390a15050565b6000806144b06040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e0000000000000000000000008152506119e3565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc17b291b00000000000000000000000000000000000000000000000000000000179052905191925060009182916001600160a01b038516916145259190614ffa565b6000604051808303816000865af19150503d8060008114614562576040519150601f19603f3d011682016040523d82523d6000602084013e614567565b606091505b5091509150816145b95760405162461bcd60e51b815260206004820181905260248201527f63616c6c2046524155445f50524f4f465f57494e444f572829206661696c656460448201526064016107d9565b60006145c482615064565b90506145d08142614e17565b94505050505090565b603880546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038083166000908152607360205260408082208484168352908220600482015492939192909116806146be5760405162461bcd60e51b815260206004820152600e60248201527f4e6f74496e4368616c6c656e676500000000000000000000000000000000000060448201526064016107d9565b60048201546001600160a01b0382811691161461471d5760405162461bcd60e51b815260206004820152601460248201527f496e446966666572656e744368616c6c656e676500000000000000000000000060448201526064016107d9565b95945050505050565b607280549060006147368361510a565b90915550506001600160a01b03908116600090815260736020908152604080832060038101805482547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016835560018301869055600283018690557fffffffffffffffffffffffff00000000000000000000000000000000000000008082169092556004909201805482169055941683526074909152902080549091169055565b611e148061514083390190565b50805460008255600202906000526020600020908101906119e091905b8082111561483e5780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201614801565b5090565b60006020828403121561485457600080fd5b5035919050565b806040810183101561146657600080fd5b6000806080838503121561487f57600080fd5b614889848461485b565b9150614898846040850161485b565b90509250929050565b6001600160a01b03811681146119e057600080fd5b80356148c1816148a1565b919050565b6000602082840312156148d857600080fd5b81356148e3816148a1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561493c5761493c6148ea565b60405290565b600067ffffffffffffffff8084111561495d5761495d6148ea565b604051601f8501601f19908116603f01168101908282118183101715614985576149856148ea565b8160405280935085815286868601111561499e57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156149ca57600080fd5b813567ffffffffffffffff8111156149e157600080fd5b8201601f810184136149f257600080fd5b614a0184823560208401614942565b949350505050565b60008083601f840112614a1b57600080fd5b50813567ffffffffffffffff811115614a3357600080fd5b6020830191508360208260051b8501011115614a4e57600080fd5b9250929050565b600080600080600080600060a0888a031215614a7057600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115614a9657600080fd5b614aa28b838c01614a09565b909750955060608a0135945060808a0135915080821115614ac257600080fd5b818a0191508a601f830112614ad657600080fd5b813581811115614ae557600080fd5b8b6020828501011115614af757600080fd5b60208301945080935050505092959891949750929550565b60008060208385031215614b2257600080fd5b823567ffffffffffffffff811115614b3957600080fd5b614b4585828601614a09565b90969095509350505050565b60008060408385031215614b6457600080fd5b823591506020830135614b76816148a1565b809150509250929050565b60008060408385031215614b9457600080fd5b50508035926020909101359150565b6000806000806000806000806000806000806101408d8f031215614bc657600080fd5b614bcf8d6148b6565b9b50614bdd60208e016148b6565b9a50614beb60408e016148b6565b9950614bf960608e016148b6565b9850614c0760808e016148b6565b975060a08d0135965060c08d0135955060e08d0135945067ffffffffffffffff6101008e01351115614c3857600080fd5b614c498e6101008f01358f01614a09565b909450925067ffffffffffffffff6101208e01351115614c6857600080fd5b614c798e6101208f01358f01614a09565b81935080925050509295989b509295989b509295989b565b600082601f830112614ca257600080fd5b6148e383833560208501614942565b600080600060608486031215614cc657600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614ceb57600080fd5b614cf786828701614c91565b9150509250925092565b600060208284031215614d1357600080fd5b813567ffffffffffffffff80821115614d2b57600080fd5b9083019060c08286031215614d3f57600080fd5b614d47614919565b82358152602083013560208201526040830135604082015260608301356060820152608083013582811115614d7b57600080fd5b614d8787828601614c91565b60808301525060a083013582811115614d9f57600080fd5b614dab87828601614c91565b60a08301525095945050505050565b60008060408385031215614dcd57600080fd5b8235614dd8816148a1565b91506020830135614b76816148a1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115614e2a57614e2a614de8565b500190565b600060208284031215614e4157600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e7a57614e7a614de8565b5060010190565b600082821015614e9357614e93614de8565b500390565b600060208284031215614eaa57600080fd5b815180151581146148e357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811015614f04578181015183820152602001614eec565b83811115611e7a5750506000910152565b60008151808452614f2d816020860160208601614ee9565b601f01601f19169290920160200192915050565b6020815260006148e36020830184614f15565b600060208284031215614f6657600080fd5b81516148e3816148a1565b6060815284606082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861115614faa57600080fd5b8560051b80886080850137602083018690528201828103608090810160408501528101849052838560a0830137600060a0858301015260a0601f19601f8601168201019150509695505050505050565b6000825161500c818460208701614ee9565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b83815282602082015260606040820152600061471d6060830184614f15565b805160208083015191908110156150a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8160200360031b1b821691505b50919050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201526000608083015160c060a08401526150ed60e0840182614f15565b905060a0840151601f198483030160c085015261471d8282614f15565b60008161511957615119614de8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fe608060405234801561001057600080fd5b50611df4806100206000396000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c80638b299903116100d8578063dfbf53ae1161008c578063f03a7fcb11610066578063f03a7fcb1461034c578063f2858aa31461035f578063faeff41b1461037257600080fd5b8063dfbf53ae1461031b578063e87e35891461033b578063ed5b13031461034357600080fd5b80639afd9d78116100bd5780639afd9d78146102c0578063abf48013146102f5578063afeae9651461030857600080fd5b80638b299903146102935780638f2400a8146102ad57600080fd5b8063631acced1161012f578063732e696111610114578063732e6961146102145780637f4c91c51461026b5780638a8cd2181461028b57600080fd5b8063631acced1461020457806370dea79a1461020c57600080fd5b806341e8510c1161016057806341e8510c146101ad578063534db0e2146101b65780635f41e3d6146101fb57600080fd5b806318ef160d1461017c5780632a51f6f714610191575b600080fd5b61018f61018a366004611732565b61037b565b005b61019a60085481565b6040519081526020015b60405180910390f35b61019a60065481565b6003546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a4565b61019a60055481565b61018f6106ad565b61018f610759565b6010546011546012546013546014546015546016546102369695949392919087565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101a4565b6002546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b6101d66107f9565b6007546102a09060ff1681565b6040516101a49190611783565b61018f6102bb36600461179d565b6108bb565b600e546102e59074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101a4565b61018f610303366004611821565b610d4a565b61019a610316366004611898565b610f0e565b600e546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b61019a610f25565b61019a60045481565b61018f61035a3660046118fa565b610f73565b61018f61036d36600461199e565b6112e1565b61019a600f5481565b6103836107f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f4249535f53454e444552000000000000000000000000000000000000000000008152509061040e5760405162461bcd60e51b815260040161040591906119c7565b60405180910390fd5b50610417610f25565b6004546104249042611a3a565b11156040518060400160405280600c81526020017f4249535f444541444c494e4500000000000000000000000000000000000000008152509061047a5760405162461bcd60e51b815260040161040591906119c7565b5060085460408051808201909152600f81527f4348414c5f494e49545f53544154450000000000000000000000000000000000602082015290156104d15760405162461bcd60e51b815260040161040591906119c7565b50600081116105225760405162461bcd60e51b815260206004820152601160248201527f494e56414c49445f4e554d5f53544550530000000000000000000000000000006044820152606401610405565b604080516000602080830191909152818301849052825180830384018152606090920190925280519101206008556040805160e08082018352600c548083526020808401879052600d54848601819052436060808701829052426080808901829052600060a0808b0182905260c09a8b018d9052601089905560118e9055601287905560138690556014849055601582905560168d90558b519889529688018d90529987019490945290850191909152908301528101939093529082018390527f71809f4d4f7bf3c208a85ccd3c922c984024f8e3cef51e3d03ae677e4217097d910160405180910390a1600160075460ff16600281111561062657610626611754565b141561065b576004546106399042611a3a565b6006546106469190611a3a565b6006556007805460ff191660021790556106a5565b600260075460ff16600281111561067457610674611754565b14156106a5576004546106879042611a3a565b6005546106949190611a3a565b6005556007805460ff191660011790555b505042600455565b600e5474010000000000000000000000000000000000000000900460ff16156107185760405162461bcd60e51b815260206004820152601460248201527f414c52454144595f5345545f524f4c4c4241434b0000000000000000000000006044820152606401610405565b600e80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b610761610f25565b60045461076e9042611a3a565b116040518060400160405280601081526020017f54494d454f55545f444541444c494e4500000000000000000000000000000000815250906107c35760405162461bcd60e51b815260040161040591906119c7565b50600260075460ff1660028111156107dd576107dd611754565b14156107ef576107ed6001611584565b565b6107ed600161160c565b6000600260075460ff16600281111561081457610814611754565b1415610837575060025473ffffffffffffffffffffffffffffffffffffffff1690565b600160075460ff16600281111561085057610850611754565b1415610873575060035473ffffffffffffffffffffffffffffffffffffffff1690565b60405162461bcd60e51b815260206004820152600760248201527f4e4f5f5455524e000000000000000000000000000000000000000000000000006044820152606401610405565b6108c36107f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f4249535f53454e44455200000000000000000000000000000000000000000000815250906109455760405162461bcd60e51b815260040161040591906119c7565b5061094e610f25565b60045461095b9042611a3a565b11156040518060400160405280600c81526020017f4249535f444541444c494e450000000000000000000000000000000000000000815250906109b15760405162461bcd60e51b815260040161040591906119c7565b50600854610a015760405162461bcd60e51b815260206004820152600f60248201527f4e4f545f494e495449414c495a454400000000000000000000000000000000006044820152606401610405565b6040805160208082018590528183018490528251808303840181526060909201909252805191012060085481146040518060400160405280600881526020017f4249535f5052455600000000000000000000000000000000000000000000000081525090610a825760405162461bcd60e51b815260040161040591906119c7565b50600a5415610aea5760095487351480610a9e5750600a548735145b610aea5760405162461bcd60e51b815260206004820152600f60248201527f414d424947554f55535f535441525400000000000000000000000000000000006044820152606401610405565b600b5460408801351415610b405760405162461bcd60e51b815260206004820152600b60248201527f494e56414c49445f454e440000000000000000000000000000000000000000006044820152606401610405565b60008411610b905760405162461bcd60e51b815260206004820152600960248201527f544f4f5f53484f525400000000000000000000000000000000000000000000006044820152606401610405565b8635600955602080880135600a55604080890135600b558051808301889052808201879052815180820383018152606090910190915280519101206008556040805160e081018252883581526020808a0135908201529081018860026020908102919091013582524382820181905242604080850182905260608086018c905260809586018b905286516010558685015160115586820151601255868101516013558686015160145560a08088015160155560c09788015160165582518f3581528f870135968101969096528e8301358684015290850193909352938301528101889052918201869052517f71809f4d4f7bf3c208a85ccd3c922c984024f8e3cef51e3d03ae677e4217097d9181900360e00190a150600160075460ff166002811115610cbf57610cbf611754565b1415610cf457600454610cd29042611a3a565b600654610cdf9190611a3a565b6006556007805460ff19166002179055610d3e565b600260075460ff166002811115610d0d57610d0d611754565b1415610d3e57600454610d209042611a3a565b600554610d2d9190611a3a565b6005556007805460ff191660011790555b50504260045550505050565b600060075460ff166002811115610d6357610d63611754565b146040518060400160405280600f81526020017f4348414c5f494e49545f5354415445000000000000000000000000000000000081525090610db85760405162461bcd60e51b815260040161040591906119c7565b5073ffffffffffffffffffffffffffffffffffffffff871615801590610df3575073ffffffffffffffffffffffffffffffffffffffff861615155b8015610e14575073ffffffffffffffffffffffffffffffffffffffff841615155b610e605760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f4144445245535300000000000000000000000000000000000000006044820152606401610405565b600280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff998a16178255600380548216988a1698909817909755600180548816968916969096179095556000805490961693909616929092178455600c829055600d8590556007805460ff19169093179092554260045560966005819055600655600955600a91909155600b91909155600f55565b60098160038110610f1e57600080fd5b0154905081565b6000600260075460ff166002811115610f4057610f40611754565b1415610f4d575060055490565b600160075460ff166002811115610f6657610f66611754565b1415610873575060065490565b610f7b6107f9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600a81526020017f4249535f53454e4445520000000000000000000000000000000000000000000081525090610ffd5760405162461bcd60e51b815260040161040591906119c7565b50611006610f25565b6004546110139042611a3a565b11156040518060400160405280600c81526020017f4249535f444541444c494e450000000000000000000000000000000000000000815250906110695760405162461bcd60e51b815260040161040591906119c7565b506040805160208082018590528183018490528251808303840181526060909201909252805191012060085481146040518060400160405280600881526020017f4249535f50524556000000000000000000000000000000000000000000000000815250906110eb5760405162461bcd60e51b815260040161040591906119c7565b5060016110f9600284611aa7565b11156111475760405162461bcd60e51b815260206004820152601460248201527f424953454354494f4e5f494e434f4d504c4554450000000000000000000000006044820152606401610405565b6001805460009173ffffffffffffffffffffffffffffffffffffffff9091169063625eb72e908b908b9060099061117e908b611a3a565b6003811061118e5761118e611a78565b01548b8b6040518663ffffffff1660e01b81526004016111b2959493929190611ca2565b60206040518083038186803b1580156111ca57600080fd5b505afa1580156111de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112029190611d62565b90506009856003811061121757611217611a78565b015481141561122f5761122a6000611689565b611239565b6112396000611701565b506001905060075460ff16600281111561125557611255611754565b141561128a576004546112689042611a3a565b6006546112759190611a3a565b6006556007805460ff191660021790556112d4565b600260075460ff1660028111156112a3576112a3611754565b14156112d4576004546112b69042611a3a565b6005546112c39190611a3a565b6005556007805460ff191660011790555b5050426004555050505050565b60025473ffffffffffffffffffffffffffffffffffffffff166113465760405162461bcd60e51b815260206004820152601060248201527f446566656e646572206e6f7420736574000000000000000000000000000000006044820152606401610405565b60025473ffffffffffffffffffffffffffffffffffffffff1633146113ad5760405162461bcd60e51b815260206004820152601360248201527f43616c6c6572206e6f7420646566656e646572000000000000000000000000006044820152606401610405565b600e5473ffffffffffffffffffffffffffffffffffffffff166114125760405162461bcd60e51b815260206004820152601260248201527f446f206e6f7420686176652077696e6e657200000000000000000000000000006044820152606401610405565b600354600e5473ffffffffffffffffffffffffffffffffffffffff9081169116141561151c5780156114d4576000546003546002546040517ffa7803e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169063fa7803e6906044015b600060405180830381600087803b1580156114b957600080fd5b505af11580156114cd573d6000803e3d6000fd5b5050505050565b600254600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555b6000546002546003546040517ffa7803e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152908216602482015291169063fa7803e69060440161149f565b50565b600354600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556002546040517f03f929a9a6b1f0aef5e43cb12b56f862da97ec3de3fda02a52e85f9f3974fb6a93611601939216908590611d7b565b60405180910390a150565b600254600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283169081179091556003546040517f03f929a9a6b1f0aef5e43cb12b56f862da97ec3de3fda02a52e85f9f3974fb6a93611601939216908590611d7b565b600260075460ff1660028111156116a2576116a2611754565b14156116b1576115818161160c565b600354600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905561158181611584565b600260075460ff16600281111561171a5761171a611754565b14156117295761158181611584565b6115818161160c565b6000806040838503121561174557600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016003831061179757611797611754565b91905290565b60008060008060008061010087890312156117b757600080fd5b60608701888111156117c857600080fd5b969896359750505060808701359460a0880135945060c0880135935060e088013592509050565b73ffffffffffffffffffffffffffffffffffffffff8116811461158157600080fd5b803561181c816117ef565b919050565b600080600080600080600060e0888a03121561183c57600080fd5b8735611847816117ef565b96506020880135611857816117ef565b95506040880135611867816117ef565b94506060880135611877816117ef565b9699959850939660808101359560a0820135955060c0909101359350915050565b6000602082840312156118aa57600080fd5b5035919050565b60008083601f8401126118c357600080fd5b50813567ffffffffffffffff8111156118db57600080fd5b6020830191508360208285010111156118f357600080fd5b9250929050565b600080600080600080600060c0888a03121561191557600080fd5b873567ffffffffffffffff8082111561192d57600080fd5b9089019060e0828c03121561194157600080fd5b90975060208901359060ff8216821461195957600080fd5b9096506040890135908082111561196f57600080fd5b5061197c8a828b016118b1565b989b979a50986060810135976080820135975060a09091013595509350505050565b6000602082840312156119b057600080fd5b813580151581146119c057600080fd5b9392505050565b600060208083528351808285015260005b818110156119f4578581018301518582016040015282016119d8565b81811115611a06576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600082821015611a73577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082611add577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee1833603018112611b1657600080fd5b90910192915050565b803567ffffffffffffffff8116811461181c57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611b6c57600080fd5b830160208101925035905067ffffffffffffffff811115611b8c57600080fd5b8036038313156118f357600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600061012067ffffffffffffffff611bfb84611b1f565b16845260208301356020850152611c1460408401611b1f565b67ffffffffffffffff166040850152611c2f60608401611811565b73ffffffffffffffffffffffffffffffffffffffff16606085015260808381013590850152611c6160a0840184611b37565b8260a0870152611c748387018284611b9b565b9250505060c083013560c085015260e083013560e08501526101008084013581860152508091505092915050565b6080815260008635611cb3816117ef565b73ffffffffffffffffffffffffffffffffffffffff9081166080840152602088013560a0840152604088013560c0840152606088013590611cf3826117ef565b1660e0830152611d066080880188611ae2565b60e0610100840152611d1c610160840182611be4565b60a089013561012085015260c089013561014085015260ff8816602085015290508560408401528281036060840152611d56818587611b9b565b98975050505050505050565b600060208284031215611d7457600080fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8481168252831660208201526060810160028310611db057611db0611754565b82604083015294935050505056fea2646970667358221220ca61e68cc8f6420782d8eb6049d6154648a92ef0dbac703ec1e96c1168fdec1a64736f6c63430008090033a264697066735822122055e961978528e625060774bb3dea305c3279322fde77d0314a9ca628b175120064736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
