{
  "_format": "hh-sol-artifact-1",
  "contractName": "GnosisSafe",
  "sourceName": "lib/safe-contracts/contracts/GnosisSafe.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "AddedOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "approvedHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ApproveHash",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "handler",
          "type": "address"
        }
      ],
      "name": "ChangedFallbackHandler",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "guard",
          "type": "address"
        }
      ],
      "name": "ChangedGuard",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        }
      ],
      "name": "ChangedThreshold",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "DisabledModule",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "EnabledModule",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "txHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "payment",
          "type": "uint256"
        }
      ],
      "name": "ExecutionFailure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "ExecutionFromModuleFailure",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "ExecutionFromModuleSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "txHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "payment",
          "type": "uint256"
        }
      ],
      "name": "ExecutionSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "RemovedOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "initiator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "owners",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "threshold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "initializer",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fallbackHandler",
          "type": "address"
        }
      ],
      "name": "SafeSetup",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "SignMsg",
      "type": "event"
    },
    {
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_threshold",
          "type": "uint256"
        }
      ],
      "name": "addOwnerWithThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hashToApprove",
          "type": "bytes32"
        }
      ],
      "name": "approveHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "approvedHashes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_threshold",
          "type": "uint256"
        }
      ],
      "name": "changeThreshold",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "signatures",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "requiredSignatures",
          "type": "uint256"
        }
      ],
      "name": "checkNSignatures",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "signatures",
          "type": "bytes"
        }
      ],
      "name": "checkSignatures",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "prevModule",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "disableModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "domainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "enableModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "enum Enum.Operation",
          "name": "operation",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "safeTxGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "gasToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "refundReceiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "encodeTransactionData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "enum Enum.Operation",
          "name": "operation",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "safeTxGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "gasToken",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "refundReceiver",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "signatures",
          "type": "bytes"
        }
      ],
      "name": "execTransaction",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "enum Enum.Operation",
          "name": "operation",
          "type": "uint8"
        }
      ],
      "name": "execTransactionFromModule",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "enum Enum.Operation",
          "name": "operation",
          "type": "uint8"
        }
      ],
      "name": "execTransactionFromModuleReturnData",
      "outputs": [
        {
          "internalType": "bool",
          "name": "success",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "returnData",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "start",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "pageSize",
          "type": "uint256"
        }
      ],
      "name": "getModulesPaginated",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "array",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "next",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOwners",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "offset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "getStorageAt",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getThreshold",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "enum Enum.Operation",
          "name": "operation",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "safeTxGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseGas",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "gasPrice",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "gasToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "refundReceiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        }
      ],
      "name": "getTransactionHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "module",
          "type": "address"
        }
      ],
      "name": "isModuleEnabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "prevOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_threshold",
          "type": "uint256"
        }
      ],
      "name": "removeOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "enum Enum.Operation",
          "name": "operation",
          "type": "uint8"
        }
      ],
      "name": "requiredTxGas",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "handler",
          "type": "address"
        }
      ],
      "name": "setFallbackHandler",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "guard",
          "type": "address"
        }
      ],
      "name": "setGuard",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_owners",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_threshold",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "fallbackHandler",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "paymentToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "payment",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "paymentReceiver",
          "type": "address"
        }
      ],
      "name": "setup",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "signedMessages",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "targetContract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "calldataPayload",
          "type": "bytes"
        }
      ],
      "name": "simulateAndRevert",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "prevOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "swapOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506001600455613540806100256000396000f3fe6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314610620578063f698da2514610640578063f8dc5dd9146106a7578063ffa1ad74146106c757610218565b8063e19a9dd9146105ab578063e318b52b146105cb578063e75235b8146105eb578063e86637db1461060057610218565b8063cc2f8452116100d1578063cc2f84521461051d578063d4d9bdcd1461054b578063d8d11f781461056b578063e009cfde1461058b57610218565b8063affed0e0146104a7578063b4faba09146104bd578063b63e800d146104dd578063c4ca3a9c146104fd57610218565b80635624b25b1161017a5780636a761202116101495780636a7612021461041a5780637d8329741461042d578063934f3a1114610465578063a0e67e2b1461048557610218565b80635624b25b146103805780635ae6bd37146103ad578063610b5925146103da578063694e80c3146103fa57610218565b80632f54bf6e116101b65780632f54bf6e146102f55780633408e47014610315578063468721a7146103325780635229073f1461035257610218565b80630d582f131461027e57806312fb68e0146102a05780632d9ad53d146102c057610218565b366102185760405134815233907f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d9060200160405180910390a2005b34801561022457600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061024f57005b36600080373360601b365260008060143601600080855af190503d6000803e80610278573d6000fd5b503d6000f35b34801561028a57600080fd5b5061029e610299366004612b7a565b610710565b005b3480156102ac57600080fd5b5061029e6102bb366004613008565b61089c565b3480156102cc57600080fd5b506102e06102db366004612a98565b610dec565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b506102e0610310366004612a98565b610e27565b34801561032157600080fd5b50465b6040519081526020016102ec565b34801561033e57600080fd5b506102e061034d366004612e01565b610e5f565b34801561035e57600080fd5b5061037261036d366004612e01565b610f4e565b6040516102ec929190613312565b34801561038c57600080fd5b506103a061039b3660046130bf565b610f84565b6040516102ec919061339d565b3480156103b957600080fd5b506103246103c8366004612f82565b60076020526000908152604090205481565b3480156103e657600080fd5b5061029e6103f5366004612a98565b61100a565b34801561040657600080fd5b5061029e610415366004612f82565b611164565b6102e0610428366004612c67565b611214565b34801561043957600080fd5b50610324610448366004612b7a565b600860209081526000928352604080842090915290825290205481565b34801561047157600080fd5b5061029e610480366004612f9b565b6115a6565b34801561049157600080fd5b5061049a611608565b6040516102ec91906132d4565b3480156104b357600080fd5b5061032460055481565b3480156104c957600080fd5b5061029e6104d8366004612ba6565b6116f9565b3480156104e957600080fd5b5061029e6104f8366004612e6b565b61171c565b34801561050957600080fd5b50610324610518366004612bf6565b61183d565b34801561052957600080fd5b5061053d610538366004612b7a565b6118d7565b6040516102ec9291906132e7565b34801561055757600080fd5b5061029e610566366004612f82565b6119d1565b34801561057757600080fd5b50610324610586366004612d40565b611a7e565b34801561059757600080fd5b5061029e6105a6366004612ab5565b611aab565b3480156105b757600080fd5b5061029e6105c6366004612a98565b611bf2565b3480156105d757600080fd5b5061029e6105e6366004612aee565b611d62565b3480156105f757600080fd5b50600454610324565b34801561060c57600080fd5b506103a061061b366004612d40565b611f99565b34801561062c57600080fd5b5061029e61063b366004612a98565b612114565b34801561064c57600080fd5b5061032460007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b3480156106b357600080fd5b5061029e6106c2366004612b39565b61217d565b3480156106d357600080fd5b506103a06040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b610718612320565b6001600160a01b0382161580159061073a57506001600160a01b038216600114155b801561074f57506001600160a01b0382163014155b6107885760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b60448201526064015b60405180910390fd5b6001600160a01b0382811660009081526002602052604090205416156107d85760405162461bcd60e51b815260206004820152600560248201526411d4cc8c0d60da1b604482015260640161077f565b60026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e080546001600160a01b038481166000818152604081208054939094166001600160a01b0319938416179093556001835283549091161790915560038054916108458361347f565b90915550506040516001600160a01b03831681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a180600454146108985761089881611164565b5050565b6108a7816041612371565b825110156108f75760405162461bcd60e51b815260206004820152600560248201527f4753303230000000000000000000000000000000000000000000000000000000604482015260640161077f565b6000808060008060005b86811015610de0576041818102890160208101516040820151919092015160ff169550909350915083610b6e57919350839161093e876041612371565b82101561098d5760405162461bcd60e51b815260206004820152600560248201527f4753303231000000000000000000000000000000000000000000000000000000604482015260640161077f565b875161099a8360206123aa565b11156109e85760405162461bcd60e51b815260206004820152600560248201527f4753303232000000000000000000000000000000000000000000000000000000604482015260640161077f565b602082890181015189519091610a0b908390610a059087906123aa565b906123aa565b1115610a595760405162461bcd60e51b815260206004820152600560248201527f4753303233000000000000000000000000000000000000000000000000000000604482015260640161077f565b6040517f20c13b0b000000000000000000000000000000000000000000000000000000008082528a8501602001916001600160a01b038916906320c13b0b90610aa8908f9086906004016133b0565b60206040518083038186803b158015610ac057600080fd5b505afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061307d565b7fffffffff000000000000000000000000000000000000000000000000000000001614610b675760405162461bcd60e51b815260206004820152600560248201527f4753303234000000000000000000000000000000000000000000000000000000604482015260640161077f565b5050610d2e565b8360ff1660011415610c09579193508391336001600160a01b0384161480610bb857506001600160a01b03851660009081526008602090815260408083208d845290915290205415155b610c045760405162461bcd60e51b815260206004820152600560248201527f4753303235000000000000000000000000000000000000000000000000000000604482015260640161077f565b610d2e565b601e8460ff161115610cce576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018b9052600190605c0160405160208183030381529060405280519060200120600486610c6e9190613445565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610cbd573d6000803e3d6000fd5b505050602060405103519450610d2e565b6040805160008152602081018083528c905260ff861691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610d21573d6000803e3d6000fd5b5050506020604051035194505b856001600160a01b0316856001600160a01b0316118015610d6857506001600160a01b038581166000908152600260205260409020541615155b8015610d7e57506001600160a01b038516600114155b610dca5760405162461bcd60e51b815260206004820152600560248201527f4753303236000000000000000000000000000000000000000000000000000000604482015260640161077f565b8495508080610dd89061347f565b915050610901565b50505050505050505050565b600060016001600160a01b03831614801590610e2157506001600160a01b038281166000908152600160205260409020541615155b92915050565b60006001600160a01b038216600114801590610e215750506001600160a01b0390811660009081526002602052604090205416151590565b600033600114801590610e895750336000908152600160205260409020546001600160a01b031615155b610ed55760405162461bcd60e51b815260206004820152600560248201527f4753313034000000000000000000000000000000000000000000000000000000604482015260640161077f565b610ee2858585855a6123c6565b90508015610f1a5760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f46565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b60006060610f5e86868686610e5f565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b60606000610f9383602061340f565b67ffffffffffffffff811115610fab57610fab6134dc565b6040519080825280601f01601f191660200182016040528015610fd5576020820181803683370190505b50905060005b83811015611002578481015460208083028401015280610ffa8161347f565b915050610fdb565b509392505050565b611012612320565b6001600160a01b0381161580159061103457506001600160a01b038116600114155b6110685760405162461bcd60e51b8152602060048201526005602482015264475331303160d81b604482015260640161077f565b6001600160a01b0381811660009081526001602052604090205416156110d05760405162461bcd60e51b815260206004820152600560248201527f4753313032000000000000000000000000000000000000000000000000000000604482015260640161077f565b600160208181527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b03858116600081815260408082208054949095166001600160a01b031994851617909455959095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091015b60405180910390a150565b61116c612320565b6003548111156111a65760405162461bcd60e51b8152602060048201526005602482015264475332303160d81b604482015260640161077f565b60018110156111df5760405162461bcd60e51b815260206004820152600560248201526423a999181960d91b604482015260640161077f565b60048190556040518181527f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c9390602001611159565b600080600061122e8e8e8e8e8e8e8e8e8e8e600554611f99565b6005805491925060006112408361347f565b90915550508051602082012091506112598282866115a6565b5060006112847f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c85490565b90506001600160a01b0381161561130a57806001600160a01b03166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b81526004016112d79c9b9a999897969594939291906131a4565b600060405180830381600087803b1580156112f157600080fd5b505af1158015611305573d6000803e3d6000fd5b505050505b6113366113198a6109c46133d5565b603f6113268c604061340f565b61133091906133ed565b9061240e565b611342906101f46133d5565b5a10156113915760405162461bcd60e51b815260206004820152600560248201527f4753303130000000000000000000000000000000000000000000000000000000604482015260640161077f565b60005a90506114028f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8c6000146113ef578e6123c6565b6109c45a6113fd919061342e565b6123c6565b935061140f5a8290612425565b9050838061141c57508915155b8061142657508715155b6114725760405162461bcd60e51b815260206004820152600560248201527f4753303133000000000000000000000000000000000000000000000000000000604482015260640161077f565b6000881561148a57611487828b8b8b8b612440565b90505b84156114ce5760408051858152602081018390527f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e910160405180910390a1611508565b60408051858152602081018390527f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23910160405180910390a15b50506001600160a01b03811615611595576040517f932713680000000000000000000000000000000000000000000000000000000081526004810183905283151560248201526001600160a01b03821690639327136890604401600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b600454806115f65760405162461bcd60e51b815260206004820152600560248201527f4753303031000000000000000000000000000000000000000000000000000000604482015260640161077f565b6116028484848461089c565b50505050565b6060600060035467ffffffffffffffff811115611627576116276134dc565b604051908082528060200260200182016040528015611650578160200160208202803683370190505b506001600090815260026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e054919250906001600160a01b03165b6001600160a01b0381166001146116f157808383815181106116b1576116b16134c6565b6001600160a01b039283166020918202929092018101919091529181166000908152600290925260409091205416816116e98161347f565b92505061168d565b509092915050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b61175a8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250612576915050565b6001600160a01b0384161561179157611791847f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b6117d18787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127bc92505050565b81156117e8576117e682600060018685612440565b505b336001600160a01b03167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b89604051611829959493929190613268565b60405180910390a250505050505050505050565b6000805a9050611886878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a6123c6565b61188f57600080fd5b60005a61189c908361342e565b9050806040516020016118b191815260200190565b60408051601f198184030181529082905262461bcd60e51b825261077f9160040161339d565b606060008267ffffffffffffffff8111156118f4576118f46134dc565b60405190808252806020026020018201604052801561191d578160200160208202803683370190505b506001600160a01b0380861660009081526001602052604081205492945091165b6001600160a01b0381161580159061196057506001600160a01b038116600114155b801561196b57508482105b156119c35780848381518110611983576119836134c6565b6001600160a01b039283166020918202929092018101919091529181166000908152600190925260409091205416816119bb8161347f565b92505061193e565b908352919491935090915050565b336000908152600260205260409020546001600160a01b0316611a365760405162461bcd60e51b815260206004820152600560248201527f4753303330000000000000000000000000000000000000000000000000000000604482015260640161077f565b336000818152600860209081526040808320858452909152808220600190555183917ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c91a350565b6000611a938c8c8c8c8c8c8c8c8c8c8c611f99565b8051906020012090509b9a5050505050505050505050565b611ab3612320565b6001600160a01b03811615801590611ad557506001600160a01b038116600114155b611b095760405162461bcd60e51b8152602060048201526005602482015264475331303160d81b604482015260640161077f565b6001600160a01b03828116600090815260016020526040902054811690821614611b755760405162461bcd60e51b815260206004820152600560248201527f4753313033000000000000000000000000000000000000000000000000000000604482015260640161077f565b6001600160a01b038181166000818152600160209081526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427691015b60405180910390a15050565b611bfa612320565b6001600160a01b03811615611d05576040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fe6d7a83a0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611c8157600080fd5b505afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb99190612f60565b611d055760405162461bcd60e51b815260206004820152600560248201527f4753333030000000000000000000000000000000000000000000000000000000604482015260640161077f565b7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c88181556040516001600160a01b03831681527f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa290602001611be6565b611d6a612320565b6001600160a01b03811615801590611d8c57506001600160a01b038116600114155b8015611da157506001600160a01b0381163014155b611dd55760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b038181166000908152600260205260409020541615611e255760405162461bcd60e51b815260206004820152600560248201526411d4cc8c0d60da1b604482015260640161077f565b6001600160a01b03821615801590611e4757506001600160a01b038216600114155b611e7b5760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b03838116600090815260026020526040902054811690831614611ecf5760405162461bcd60e51b8152602060048201526005602482015264475332303560d81b604482015260640161077f565b6001600160a01b038281166000818152600260209081526040808320805487871680865283862080549289166001600160a01b0319938416179055968a1685528285208054821690971790965592849052825490941690915591519081527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf910160405180910390a16040516001600160a01b03821681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a1505050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d604051611fd3929190613194565b604051908190038120611ff9949392918e908e908e908e908e908e908e9060200161332d565b60408051601f19818403018152919052805160209091012090507f19000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000006120af60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b61211c612320565b612144817f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b6040516001600160a01b03821681527f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b090602001611159565b612185612320565b806001600354612195919061342e565b10156121cb5760405162461bcd60e51b8152602060048201526005602482015264475332303160d81b604482015260640161077f565b6001600160a01b038216158015906121ed57506001600160a01b038216600114155b6122215760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b038381166000908152600260205260409020548116908316146122755760405162461bcd60e51b8152602060048201526005602482015264475332303560d81b604482015260640161077f565b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b031992831617909455918152825490911690915560038054916122c883613468565b90915550506040516001600160a01b03831681527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf9060200160405180910390a1806004541461231b5761231b81611164565b505050565b33301461236f5760405162461bcd60e51b815260206004820152600560248201527f4753303331000000000000000000000000000000000000000000000000000000604482015260640161077f565b565b60008261238057506000610e21565b600061238c838561340f565b90508261239985836133ed565b146123a357600080fd5b9392505050565b6000806123b783856133d5565b9050838110156123a357600080fd5b600060018360018111156123dc576123dc6134b0565b14156123f5576000808551602087018986f49050612405565b600080855160208701888a87f190505b95945050505050565b60008183101561241e57816123a3565b5090919050565b60008282111561243457600080fd5b6000610f46838561342e565b6000806001600160a01b03831615612458578261245a565b325b90506001600160a01b0384166125055761248c3a861061247a573a61247c565b855b61248689896123aa565b90612371565b6040519092506001600160a01b0382169083156108fc029084906000818181858888f193505050506125005760405162461bcd60e51b815260206004820152600560248201527f4753303131000000000000000000000000000000000000000000000000000000604482015260640161077f565b61256c565b6125138561248689896123aa565b91506125208482846128e6565b61256c5760405162461bcd60e51b815260206004820152600560248201527f4753303132000000000000000000000000000000000000000000000000000000604482015260640161077f565b5095945050505050565b600454156125c65760405162461bcd60e51b815260206004820152600560248201527f4753323030000000000000000000000000000000000000000000000000000000604482015260640161077f565b81518111156125ff5760405162461bcd60e51b8152602060048201526005602482015264475332303160d81b604482015260640161077f565b60018110156126385760405162461bcd60e51b815260206004820152600560248201526423a999181960d91b604482015260640161077f565b600160005b835181101561278957600084828151811061265a5761265a6134c6565b6020026020010151905060006001600160a01b0316816001600160a01b03161415801561269157506001600160a01b038116600114155b80156126a657506001600160a01b0381163014155b80156126c45750806001600160a01b0316836001600160a01b031614155b6126f85760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b0381811660009081526002602052604090205416156127485760405162461bcd60e51b815260206004820152600560248201526411d4cc8c0d60da1b604482015260640161077f565b6001600160a01b03928316600090815260026020526040902080546001600160a01b03191693821693909317909255806127818161347f565b91505061263d565b506001600160a01b0316600090815260026020526040902080546001600160a01b03191660011790559051600355600455565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f546001600160a01b03161561283e5760405162461bcd60e51b815260206004820152600560248201527f4753313030000000000000000000000000000000000000000000000000000000604482015260640161077f565b6001600081905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b03191690911790556001600160a01b038216156108985761289a8260008360015a6123c6565b6108985760405162461bcd60e51b815260206004820152600560248201527f4753303030000000000000000000000000000000000000000000000000000000604482015260640161077f565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251600093929184919082896127105a03f13d8015612986576020811461298e5760009350612999565b819350612999565b600051158215171593505b5050509392505050565b80356129ae816134f2565b919050565b60008083601f8401126129c557600080fd5b50813567ffffffffffffffff8111156129dd57600080fd5b6020830191508360208285010111156129f557600080fd5b9250929050565b600082601f830112612a0d57600080fd5b813567ffffffffffffffff80821115612a2857612a286134dc565b604051601f8301601f19908116603f01168101908282118183101715612a5057612a506134dc565b81604052838152866020858801011115612a6957600080fd5b836020870160208301376000602085830101528094505050505092915050565b8035600281106129ae57600080fd5b600060208284031215612aaa57600080fd5b81356123a3816134f2565b60008060408385031215612ac857600080fd5b8235612ad3816134f2565b91506020830135612ae3816134f2565b809150509250929050565b600080600060608486031215612b0357600080fd5b8335612b0e816134f2565b92506020840135612b1e816134f2565b91506040840135612b2e816134f2565b809150509250925092565b600080600060608486031215612b4e57600080fd5b8335612b59816134f2565b92506020840135612b69816134f2565b929592945050506040919091013590565b60008060408385031215612b8d57600080fd5b8235612b98816134f2565b946020939093013593505050565b60008060408385031215612bb957600080fd5b8235612bc4816134f2565b9150602083013567ffffffffffffffff811115612be057600080fd5b612bec858286016129fc565b9150509250929050565b600080600080600060808688031215612c0e57600080fd5b8535612c19816134f2565b945060208601359350604086013567ffffffffffffffff811115612c3c57600080fd5b612c48888289016129b3565b9094509250612c5b905060608701612a89565b90509295509295909350565b60008060008060008060008060008060006101408c8e031215612c8957600080fd5b612c928c6129a3565b9a5060208c0135995067ffffffffffffffff8060408e01351115612cb557600080fd5b612cc58e60408f01358f016129b3565b909a509850612cd660608e01612a89565b975060808d0135965060a08d0135955060c08d01359450612cf960e08e016129a3565b9350612d086101008e016129a3565b9250806101208e01351115612d1c57600080fd5b50612d2e8d6101208e01358e016129fc565b90509295989b509295989b9093969950565b60008060008060008060008060008060006101408c8e031215612d6257600080fd5b8b35612d6d816134f2565b9a5060208c0135995060408c013567ffffffffffffffff811115612d9057600080fd5b612d9c8e828f016129b3565b909a509850612daf905060608d01612a89565b965060808c0135955060a08c0135945060c08c0135935060e08c0135612dd4816134f2565b92506101008c0135612de5816134f2565b809250506101208c013590509295989b509295989b9093969950565b60008060008060808587031215612e1757600080fd5b8435612e22816134f2565b935060208501359250604085013567ffffffffffffffff811115612e4557600080fd5b612e51878288016129fc565b925050612e6060608601612a89565b905092959194509250565b6000806000806000806000806000806101008b8d031215612e8b57600080fd5b8a3567ffffffffffffffff80821115612ea357600080fd5b818d0191508d601f830112612eb757600080fd5b813581811115612ec657600080fd5b8e60208260051b8501011115612edb57600080fd5b60208381019d50909b508d01359950612ef660408e016129a3565b985060608d0135915080821115612f0c57600080fd5b50612f198d828e016129b3565b9097509550612f2c905060808c016129a3565b9350612f3a60a08c016129a3565b925060c08b01359150612f4f60e08c016129a3565b90509295989b9194979a5092959850565b600060208284031215612f7257600080fd5b815180151581146123a357600080fd5b600060208284031215612f9457600080fd5b5035919050565b600080600060608486031215612fb057600080fd5b83359250602084013567ffffffffffffffff80821115612fcf57600080fd5b612fdb878388016129fc565b93506040860135915080821115612ff157600080fd5b50612ffe868287016129fc565b9150509250925092565b6000806000806080858703121561301e57600080fd5b84359350602085013567ffffffffffffffff8082111561303d57600080fd5b613049888389016129fc565b9450604087013591508082111561305f57600080fd5b5061306c878288016129fc565b949793965093946060013593505050565b60006020828403121561308f57600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146123a357600080fd5b600080604083850312156130d257600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561311a5781516001600160a01b0316875295820195908201906001016130f5565b509495945050505050565b6000815180845260005b8181101561314b5760208185018101518683018201520161312f565b8181111561315d576000602083870101525b50601f01601f19169290920160200192915050565b6002811061319057634e487b7160e01b600052602160045260246000fd5b9052565b8183823760009101908152919050565b60006101606001600160a01b038f1683528d60208401528060408401528b81840152506101808b8d828501376000838d01820152601f8c01601f191683016131ef606085018d613172565b8a60808501528960a08501528860c085015261321660e08501896001600160a01b03169052565b6001600160a01b038716610100850152818482030161012085015261323d82820187613125565b925050506132576101408301846001600160a01b03169052565b9d9c50505050505050505050505050565b6080808252810185905260008660a08301825b888110156132ab57823561328e816134f2565b6001600160a01b031682526020928301929091019060010161327b565b50602084019690965250506001600160a01b039283166040820152911660609091015292915050565b6020815260006123a360208301846130e1565b6040815260006132fa60408301856130e1565b90506001600160a01b03831660208301529392505050565b8215158152604060208201526000610f466040830184613125565b6000610160820190508c82526001600160a01b03808d1660208401528b60408401528a6060840152613362608084018b613172565b60a083019890985260c082019690965260e0810194909452918516610100840152909316610120820152610140019190915295945050505050565b6020815260006123a36020830184613125565b6040815260006133c36040830185613125565b82810360208401526124058185613125565b600082198211156133e8576133e861349a565b500190565b60008261340a57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156134295761342961349a565b500290565b6000828210156134405761344061349a565b500390565b600060ff821660ff84168082101561345f5761345f61349a565b90039392505050565b6000816134775761347761349a565b506000190190565b60006000198214156134935761349361349a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461350757600080fd5b5056fea264697066735822122030c7cd4041c7a5538bd654a38db5fce022d567513a73dda28173d4d9e8cc85f864736f6c63430008070033",
  "deployedBytecode": "0x6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314610620578063f698da2514610640578063f8dc5dd9146106a7578063ffa1ad74146106c757610218565b8063e19a9dd9146105ab578063e318b52b146105cb578063e75235b8146105eb578063e86637db1461060057610218565b8063cc2f8452116100d1578063cc2f84521461051d578063d4d9bdcd1461054b578063d8d11f781461056b578063e009cfde1461058b57610218565b8063affed0e0146104a7578063b4faba09146104bd578063b63e800d146104dd578063c4ca3a9c146104fd57610218565b80635624b25b1161017a5780636a761202116101495780636a7612021461041a5780637d8329741461042d578063934f3a1114610465578063a0e67e2b1461048557610218565b80635624b25b146103805780635ae6bd37146103ad578063610b5925146103da578063694e80c3146103fa57610218565b80632f54bf6e116101b65780632f54bf6e146102f55780633408e47014610315578063468721a7146103325780635229073f1461035257610218565b80630d582f131461027e57806312fb68e0146102a05780632d9ad53d146102c057610218565b366102185760405134815233907f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d9060200160405180910390a2005b34801561022457600080fd5b507f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d580548061024f57005b36600080373360601b365260008060143601600080855af190503d6000803e80610278573d6000fd5b503d6000f35b34801561028a57600080fd5b5061029e610299366004612b7a565b610710565b005b3480156102ac57600080fd5b5061029e6102bb366004613008565b61089c565b3480156102cc57600080fd5b506102e06102db366004612a98565b610dec565b60405190151581526020015b60405180910390f35b34801561030157600080fd5b506102e0610310366004612a98565b610e27565b34801561032157600080fd5b50465b6040519081526020016102ec565b34801561033e57600080fd5b506102e061034d366004612e01565b610e5f565b34801561035e57600080fd5b5061037261036d366004612e01565b610f4e565b6040516102ec929190613312565b34801561038c57600080fd5b506103a061039b3660046130bf565b610f84565b6040516102ec919061339d565b3480156103b957600080fd5b506103246103c8366004612f82565b60076020526000908152604090205481565b3480156103e657600080fd5b5061029e6103f5366004612a98565b61100a565b34801561040657600080fd5b5061029e610415366004612f82565b611164565b6102e0610428366004612c67565b611214565b34801561043957600080fd5b50610324610448366004612b7a565b600860209081526000928352604080842090915290825290205481565b34801561047157600080fd5b5061029e610480366004612f9b565b6115a6565b34801561049157600080fd5b5061049a611608565b6040516102ec91906132d4565b3480156104b357600080fd5b5061032460055481565b3480156104c957600080fd5b5061029e6104d8366004612ba6565b6116f9565b3480156104e957600080fd5b5061029e6104f8366004612e6b565b61171c565b34801561050957600080fd5b50610324610518366004612bf6565b61183d565b34801561052957600080fd5b5061053d610538366004612b7a565b6118d7565b6040516102ec9291906132e7565b34801561055757600080fd5b5061029e610566366004612f82565b6119d1565b34801561057757600080fd5b50610324610586366004612d40565b611a7e565b34801561059757600080fd5b5061029e6105a6366004612ab5565b611aab565b3480156105b757600080fd5b5061029e6105c6366004612a98565b611bf2565b3480156105d757600080fd5b5061029e6105e6366004612aee565b611d62565b3480156105f757600080fd5b50600454610324565b34801561060c57600080fd5b506103a061061b366004612d40565b611f99565b34801561062c57600080fd5b5061029e61063b366004612a98565b612114565b34801561064c57600080fd5b5061032460007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b3480156106b357600080fd5b5061029e6106c2366004612b39565b61217d565b3480156106d357600080fd5b506103a06040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b610718612320565b6001600160a01b0382161580159061073a57506001600160a01b038216600114155b801561074f57506001600160a01b0382163014155b6107885760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b60448201526064015b60405180910390fd5b6001600160a01b0382811660009081526002602052604090205416156107d85760405162461bcd60e51b815260206004820152600560248201526411d4cc8c0d60da1b604482015260640161077f565b60026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e080546001600160a01b038481166000818152604081208054939094166001600160a01b0319938416179093556001835283549091161790915560038054916108458361347f565b90915550506040516001600160a01b03831681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a180600454146108985761089881611164565b5050565b6108a7816041612371565b825110156108f75760405162461bcd60e51b815260206004820152600560248201527f4753303230000000000000000000000000000000000000000000000000000000604482015260640161077f565b6000808060008060005b86811015610de0576041818102890160208101516040820151919092015160ff169550909350915083610b6e57919350839161093e876041612371565b82101561098d5760405162461bcd60e51b815260206004820152600560248201527f4753303231000000000000000000000000000000000000000000000000000000604482015260640161077f565b875161099a8360206123aa565b11156109e85760405162461bcd60e51b815260206004820152600560248201527f4753303232000000000000000000000000000000000000000000000000000000604482015260640161077f565b602082890181015189519091610a0b908390610a059087906123aa565b906123aa565b1115610a595760405162461bcd60e51b815260206004820152600560248201527f4753303233000000000000000000000000000000000000000000000000000000604482015260640161077f565b6040517f20c13b0b000000000000000000000000000000000000000000000000000000008082528a8501602001916001600160a01b038916906320c13b0b90610aa8908f9086906004016133b0565b60206040518083038186803b158015610ac057600080fd5b505afa158015610ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af8919061307d565b7fffffffff000000000000000000000000000000000000000000000000000000001614610b675760405162461bcd60e51b815260206004820152600560248201527f4753303234000000000000000000000000000000000000000000000000000000604482015260640161077f565b5050610d2e565b8360ff1660011415610c09579193508391336001600160a01b0384161480610bb857506001600160a01b03851660009081526008602090815260408083208d845290915290205415155b610c045760405162461bcd60e51b815260206004820152600560248201527f4753303235000000000000000000000000000000000000000000000000000000604482015260640161077f565b610d2e565b601e8460ff161115610cce576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018b9052600190605c0160405160208183030381529060405280519060200120600486610c6e9190613445565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610cbd573d6000803e3d6000fd5b505050602060405103519450610d2e565b6040805160008152602081018083528c905260ff861691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa158015610d21573d6000803e3d6000fd5b5050506020604051035194505b856001600160a01b0316856001600160a01b0316118015610d6857506001600160a01b038581166000908152600260205260409020541615155b8015610d7e57506001600160a01b038516600114155b610dca5760405162461bcd60e51b815260206004820152600560248201527f4753303236000000000000000000000000000000000000000000000000000000604482015260640161077f565b8495508080610dd89061347f565b915050610901565b50505050505050505050565b600060016001600160a01b03831614801590610e2157506001600160a01b038281166000908152600160205260409020541615155b92915050565b60006001600160a01b038216600114801590610e215750506001600160a01b0390811660009081526002602052604090205416151590565b600033600114801590610e895750336000908152600160205260409020546001600160a01b031615155b610ed55760405162461bcd60e51b815260206004820152600560248201527f4753313034000000000000000000000000000000000000000000000000000000604482015260640161077f565b610ee2858585855a6123c6565b90508015610f1a5760405133907f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb890600090a2610f46565b60405133907facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37590600090a25b949350505050565b60006060610f5e86868686610e5f565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b60606000610f9383602061340f565b67ffffffffffffffff811115610fab57610fab6134dc565b6040519080825280601f01601f191660200182016040528015610fd5576020820181803683370190505b50905060005b83811015611002578481015460208083028401015280610ffa8161347f565b915050610fdb565b509392505050565b611012612320565b6001600160a01b0381161580159061103457506001600160a01b038116600114155b6110685760405162461bcd60e51b8152602060048201526005602482015264475331303160d81b604482015260640161077f565b6001600160a01b0381811660009081526001602052604090205416156110d05760405162461bcd60e51b815260206004820152600560248201527f4753313032000000000000000000000000000000000000000000000000000000604482015260640161077f565b600160208181527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b03858116600081815260408082208054949095166001600160a01b031994851617909455959095528254168417909155519182527fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844091015b60405180910390a150565b61116c612320565b6003548111156111a65760405162461bcd60e51b8152602060048201526005602482015264475332303160d81b604482015260640161077f565b60018110156111df5760405162461bcd60e51b815260206004820152600560248201526423a999181960d91b604482015260640161077f565b60048190556040518181527f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c9390602001611159565b600080600061122e8e8e8e8e8e8e8e8e8e8e600554611f99565b6005805491925060006112408361347f565b90915550508051602082012091506112598282866115a6565b5060006112847f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c85490565b90506001600160a01b0381161561130a57806001600160a01b03166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b81526004016112d79c9b9a999897969594939291906131a4565b600060405180830381600087803b1580156112f157600080fd5b505af1158015611305573d6000803e3d6000fd5b505050505b6113366113198a6109c46133d5565b603f6113268c604061340f565b61133091906133ed565b9061240e565b611342906101f46133d5565b5a10156113915760405162461bcd60e51b815260206004820152600560248201527f4753303130000000000000000000000000000000000000000000000000000000604482015260640161077f565b60005a90506114028f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e8c6000146113ef578e6123c6565b6109c45a6113fd919061342e565b6123c6565b935061140f5a8290612425565b9050838061141c57508915155b8061142657508715155b6114725760405162461bcd60e51b815260206004820152600560248201527f4753303133000000000000000000000000000000000000000000000000000000604482015260640161077f565b6000881561148a57611487828b8b8b8b612440565b90505b84156114ce5760408051858152602081018390527f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e910160405180910390a1611508565b60408051858152602081018390527f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d23910160405180910390a15b50506001600160a01b03811615611595576040517f932713680000000000000000000000000000000000000000000000000000000081526004810183905283151560248201526001600160a01b03821690639327136890604401600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b600454806115f65760405162461bcd60e51b815260206004820152600560248201527f4753303031000000000000000000000000000000000000000000000000000000604482015260640161077f565b6116028484848461089c565b50505050565b6060600060035467ffffffffffffffff811115611627576116276134dc565b604051908082528060200260200182016040528015611650578160200160208202803683370190505b506001600090815260026020527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e054919250906001600160a01b03165b6001600160a01b0381166001146116f157808383815181106116b1576116b16134c6565b6001600160a01b039283166020918202929092018101919091529181166000908152600290925260409091205416816116e98161347f565b92505061168d565b509092915050565b600080825160208401855af480600052503d6020523d600060403e60403d016000fd5b61175a8a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508c9250612576915050565b6001600160a01b0384161561179157611791847f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b6117d18787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506127bc92505050565b81156117e8576117e682600060018685612440565b505b336001600160a01b03167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b89604051611829959493929190613268565b60405180910390a250505050505050505050565b6000805a9050611886878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925050505a6123c6565b61188f57600080fd5b60005a61189c908361342e565b9050806040516020016118b191815260200190565b60408051601f198184030181529082905262461bcd60e51b825261077f9160040161339d565b606060008267ffffffffffffffff8111156118f4576118f46134dc565b60405190808252806020026020018201604052801561191d578160200160208202803683370190505b506001600160a01b0380861660009081526001602052604081205492945091165b6001600160a01b0381161580159061196057506001600160a01b038116600114155b801561196b57508482105b156119c35780848381518110611983576119836134c6565b6001600160a01b039283166020918202929092018101919091529181166000908152600190925260409091205416816119bb8161347f565b92505061193e565b908352919491935090915050565b336000908152600260205260409020546001600160a01b0316611a365760405162461bcd60e51b815260206004820152600560248201527f4753303330000000000000000000000000000000000000000000000000000000604482015260640161077f565b336000818152600860209081526040808320858452909152808220600190555183917ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c91a350565b6000611a938c8c8c8c8c8c8c8c8c8c8c611f99565b8051906020012090509b9a5050505050505050505050565b611ab3612320565b6001600160a01b03811615801590611ad557506001600160a01b038116600114155b611b095760405162461bcd60e51b8152602060048201526005602482015264475331303160d81b604482015260640161077f565b6001600160a01b03828116600090815260016020526040902054811690821614611b755760405162461bcd60e51b815260206004820152600560248201527f4753313033000000000000000000000000000000000000000000000000000000604482015260640161077f565b6001600160a01b038181166000818152600160209081526040808320805488871685528285208054919097166001600160a01b03199182161790965592849052825490941690915591519081527faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427691015b60405180910390a15050565b611bfa612320565b6001600160a01b03811615611d05576040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527fe6d7a83a0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611c8157600080fd5b505afa158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb99190612f60565b611d055760405162461bcd60e51b815260206004820152600560248201527f4753333030000000000000000000000000000000000000000000000000000000604482015260640161077f565b7f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c88181556040516001600160a01b03831681527f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa290602001611be6565b611d6a612320565b6001600160a01b03811615801590611d8c57506001600160a01b038116600114155b8015611da157506001600160a01b0381163014155b611dd55760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b038181166000908152600260205260409020541615611e255760405162461bcd60e51b815260206004820152600560248201526411d4cc8c0d60da1b604482015260640161077f565b6001600160a01b03821615801590611e4757506001600160a01b038216600114155b611e7b5760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b03838116600090815260026020526040902054811690831614611ecf5760405162461bcd60e51b8152602060048201526005602482015264475332303560d81b604482015260640161077f565b6001600160a01b038281166000818152600260209081526040808320805487871680865283862080549289166001600160a01b0319938416179055968a1685528285208054821690971790965592849052825490941690915591519081527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf910160405180910390a16040516001600160a01b03821681527f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269060200160405180910390a1505050565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d604051611fd3929190613194565b604051908190038120611ff9949392918e908e908e908e908e908e908e9060200161332d565b60408051601f19818403018152919052805160209091012090507f19000000000000000000000000000000000000000000000000000000000000007f01000000000000000000000000000000000000000000000000000000000000006120af60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a794692184660408051602081019390935282015230606082015260800160405160208183030381529060405280519060200120905090565b6040517fff0000000000000000000000000000000000000000000000000000000000000093841660208201529290911660218301526022820152604281018290526062016040516020818303038152906040529150509b9a5050505050505050505050565b61211c612320565b612144817f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d555565b6040516001600160a01b03821681527f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b090602001611159565b612185612320565b806001600354612195919061342e565b10156121cb5760405162461bcd60e51b8152602060048201526005602482015264475332303160d81b604482015260640161077f565b6001600160a01b038216158015906121ed57506001600160a01b038216600114155b6122215760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b038381166000908152600260205260409020548116908316146122755760405162461bcd60e51b8152602060048201526005602482015264475332303560d81b604482015260640161077f565b6001600160a01b03828116600081815260026020526040808220805488861684529183208054929095166001600160a01b031992831617909455918152825490911690915560038054916122c883613468565b90915550506040516001600160a01b03831681527ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf9060200160405180910390a1806004541461231b5761231b81611164565b505050565b33301461236f5760405162461bcd60e51b815260206004820152600560248201527f4753303331000000000000000000000000000000000000000000000000000000604482015260640161077f565b565b60008261238057506000610e21565b600061238c838561340f565b90508261239985836133ed565b146123a357600080fd5b9392505050565b6000806123b783856133d5565b9050838110156123a357600080fd5b600060018360018111156123dc576123dc6134b0565b14156123f5576000808551602087018986f49050612405565b600080855160208701888a87f190505b95945050505050565b60008183101561241e57816123a3565b5090919050565b60008282111561243457600080fd5b6000610f46838561342e565b6000806001600160a01b03831615612458578261245a565b325b90506001600160a01b0384166125055761248c3a861061247a573a61247c565b855b61248689896123aa565b90612371565b6040519092506001600160a01b0382169083156108fc029084906000818181858888f193505050506125005760405162461bcd60e51b815260206004820152600560248201527f4753303131000000000000000000000000000000000000000000000000000000604482015260640161077f565b61256c565b6125138561248689896123aa565b91506125208482846128e6565b61256c5760405162461bcd60e51b815260206004820152600560248201527f4753303132000000000000000000000000000000000000000000000000000000604482015260640161077f565b5095945050505050565b600454156125c65760405162461bcd60e51b815260206004820152600560248201527f4753323030000000000000000000000000000000000000000000000000000000604482015260640161077f565b81518111156125ff5760405162461bcd60e51b8152602060048201526005602482015264475332303160d81b604482015260640161077f565b60018110156126385760405162461bcd60e51b815260206004820152600560248201526423a999181960d91b604482015260640161077f565b600160005b835181101561278957600084828151811061265a5761265a6134c6565b6020026020010151905060006001600160a01b0316816001600160a01b03161415801561269157506001600160a01b038116600114155b80156126a657506001600160a01b0381163014155b80156126c45750806001600160a01b0316836001600160a01b031614155b6126f85760405162461bcd60e51b8152602060048201526005602482015264475332303360d81b604482015260640161077f565b6001600160a01b0381811660009081526002602052604090205416156127485760405162461bcd60e51b815260206004820152600560248201526411d4cc8c0d60da1b604482015260640161077f565b6001600160a01b03928316600090815260026020526040902080546001600160a01b03191693821693909317909255806127818161347f565b91505061263d565b506001600160a01b0316600090815260026020526040902080546001600160a01b03191660011790559051600355600455565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f546001600160a01b03161561283e5760405162461bcd60e51b815260206004820152600560248201527f4753313030000000000000000000000000000000000000000000000000000000604482015260640161077f565b6001600081905260208190527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f80546001600160a01b03191690911790556001600160a01b038216156108985761289a8260008360015a6123c6565b6108985760405162461bcd60e51b815260206004820152600560248201527f4753303030000000000000000000000000000000000000000000000000000000604482015260640161077f565b604080516001600160a01b03841660248201526044808201849052825180830390910181526064909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781528251600093929184919082896127105a03f13d8015612986576020811461298e5760009350612999565b819350612999565b600051158215171593505b5050509392505050565b80356129ae816134f2565b919050565b60008083601f8401126129c557600080fd5b50813567ffffffffffffffff8111156129dd57600080fd5b6020830191508360208285010111156129f557600080fd5b9250929050565b600082601f830112612a0d57600080fd5b813567ffffffffffffffff80821115612a2857612a286134dc565b604051601f8301601f19908116603f01168101908282118183101715612a5057612a506134dc565b81604052838152866020858801011115612a6957600080fd5b836020870160208301376000602085830101528094505050505092915050565b8035600281106129ae57600080fd5b600060208284031215612aaa57600080fd5b81356123a3816134f2565b60008060408385031215612ac857600080fd5b8235612ad3816134f2565b91506020830135612ae3816134f2565b809150509250929050565b600080600060608486031215612b0357600080fd5b8335612b0e816134f2565b92506020840135612b1e816134f2565b91506040840135612b2e816134f2565b809150509250925092565b600080600060608486031215612b4e57600080fd5b8335612b59816134f2565b92506020840135612b69816134f2565b929592945050506040919091013590565b60008060408385031215612b8d57600080fd5b8235612b98816134f2565b946020939093013593505050565b60008060408385031215612bb957600080fd5b8235612bc4816134f2565b9150602083013567ffffffffffffffff811115612be057600080fd5b612bec858286016129fc565b9150509250929050565b600080600080600060808688031215612c0e57600080fd5b8535612c19816134f2565b945060208601359350604086013567ffffffffffffffff811115612c3c57600080fd5b612c48888289016129b3565b9094509250612c5b905060608701612a89565b90509295509295909350565b60008060008060008060008060008060006101408c8e031215612c8957600080fd5b612c928c6129a3565b9a5060208c0135995067ffffffffffffffff8060408e01351115612cb557600080fd5b612cc58e60408f01358f016129b3565b909a509850612cd660608e01612a89565b975060808d0135965060a08d0135955060c08d01359450612cf960e08e016129a3565b9350612d086101008e016129a3565b9250806101208e01351115612d1c57600080fd5b50612d2e8d6101208e01358e016129fc565b90509295989b509295989b9093969950565b60008060008060008060008060008060006101408c8e031215612d6257600080fd5b8b35612d6d816134f2565b9a5060208c0135995060408c013567ffffffffffffffff811115612d9057600080fd5b612d9c8e828f016129b3565b909a509850612daf905060608d01612a89565b965060808c0135955060a08c0135945060c08c0135935060e08c0135612dd4816134f2565b92506101008c0135612de5816134f2565b809250506101208c013590509295989b509295989b9093969950565b60008060008060808587031215612e1757600080fd5b8435612e22816134f2565b935060208501359250604085013567ffffffffffffffff811115612e4557600080fd5b612e51878288016129fc565b925050612e6060608601612a89565b905092959194509250565b6000806000806000806000806000806101008b8d031215612e8b57600080fd5b8a3567ffffffffffffffff80821115612ea357600080fd5b818d0191508d601f830112612eb757600080fd5b813581811115612ec657600080fd5b8e60208260051b8501011115612edb57600080fd5b60208381019d50909b508d01359950612ef660408e016129a3565b985060608d0135915080821115612f0c57600080fd5b50612f198d828e016129b3565b9097509550612f2c905060808c016129a3565b9350612f3a60a08c016129a3565b925060c08b01359150612f4f60e08c016129a3565b90509295989b9194979a5092959850565b600060208284031215612f7257600080fd5b815180151581146123a357600080fd5b600060208284031215612f9457600080fd5b5035919050565b600080600060608486031215612fb057600080fd5b83359250602084013567ffffffffffffffff80821115612fcf57600080fd5b612fdb878388016129fc565b93506040860135915080821115612ff157600080fd5b50612ffe868287016129fc565b9150509250925092565b6000806000806080858703121561301e57600080fd5b84359350602085013567ffffffffffffffff8082111561303d57600080fd5b613049888389016129fc565b9450604087013591508082111561305f57600080fd5b5061306c878288016129fc565b949793965093946060013593505050565b60006020828403121561308f57600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146123a357600080fd5b600080604083850312156130d257600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b8381101561311a5781516001600160a01b0316875295820195908201906001016130f5565b509495945050505050565b6000815180845260005b8181101561314b5760208185018101518683018201520161312f565b8181111561315d576000602083870101525b50601f01601f19169290920160200192915050565b6002811061319057634e487b7160e01b600052602160045260246000fd5b9052565b8183823760009101908152919050565b60006101606001600160a01b038f1683528d60208401528060408401528b81840152506101808b8d828501376000838d01820152601f8c01601f191683016131ef606085018d613172565b8a60808501528960a08501528860c085015261321660e08501896001600160a01b03169052565b6001600160a01b038716610100850152818482030161012085015261323d82820187613125565b925050506132576101408301846001600160a01b03169052565b9d9c50505050505050505050505050565b6080808252810185905260008660a08301825b888110156132ab57823561328e816134f2565b6001600160a01b031682526020928301929091019060010161327b565b50602084019690965250506001600160a01b039283166040820152911660609091015292915050565b6020815260006123a360208301846130e1565b6040815260006132fa60408301856130e1565b90506001600160a01b03831660208301529392505050565b8215158152604060208201526000610f466040830184613125565b6000610160820190508c82526001600160a01b03808d1660208401528b60408401528a6060840152613362608084018b613172565b60a083019890985260c082019690965260e0810194909452918516610100840152909316610120820152610140019190915295945050505050565b6020815260006123a36020830184613125565b6040815260006133c36040830185613125565b82810360208401526124058185613125565b600082198211156133e8576133e861349a565b500190565b60008261340a57634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156134295761342961349a565b500290565b6000828210156134405761344061349a565b500390565b600060ff821660ff84168082101561345f5761345f61349a565b90039392505050565b6000816134775761347761349a565b506000190190565b60006000198214156134935761349361349a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461350757600080fd5b5056fea264697066735822122030c7cd4041c7a5538bd654a38db5fce022d567513a73dda28173d4d9e8cc85f864736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
