0g-storage-node/storage-contracts-abis/PoraMineTest.json
2024-12-26 18:49:07 +08:00

1465 lines
96 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "PoraMineTest",
"sourceName": "contracts/test/PoraMineTest.sol",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "settings",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "beneficiary",
"type": "address"
}
],
"name": "NewMinerId",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "epoch",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "epochIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
}
],
"name": "NewSubmission",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "UpdateMinerId",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PARAMS_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "epoch",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineStart",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "flowRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "flowLength",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "blockDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "digest",
"type": "bytes32"
}
],
"internalType": "struct MineContext",
"name": "context",
"type": "tuple"
}
],
"name": "basicCheck",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "beneficiaries",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "canSubmit",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
}
],
"name": "computeWorkerContext",
"outputs": [
{
"components": [
{
"components": [
{
"internalType": "uint256",
"name": "epoch",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineStart",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "flowRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "flowLength",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "blockDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "digest",
"type": "bytes32"
}
],
"internalType": "struct MineContext",
"name": "context",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "poraTarget",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "subtaskDigest",
"type": "bytes32"
},
{
"internalType": "uint64",
"name": "maxShards",
"type": "uint64"
}
],
"internalType": "struct WorkerContext",
"name": "answer",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "currentSubmissions",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "dataProofEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "difficultyAdjustRatio",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fixedDifficulty",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "flow",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getRoleMember",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleMemberCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "epoch",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineStart",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "flowRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "flowLength",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "blockDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "digest",
"type": "bytes32"
}
],
"internalType": "struct MineContext",
"name": "context",
"type": "tuple"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
}
],
"name": "getSubtaskDigest",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "difficulty",
"type": "uint256"
},
{
"internalType": "address",
"name": "flow_",
"type": "address"
},
{
"internalType": "address",
"name": "reward_",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "initialized",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastMinedEpoch",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxShards",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "minDifficulty",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nSubtasks",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
},
{
"internalType": "bytes32",
"name": "subtaskDigest",
"type": "bytes32"
}
],
"name": "pora",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "poraTarget",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "poraVersion",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
},
{
"internalType": "bytes32[128]",
"name": "unsealedData",
"type": "bytes32[128]"
}
],
"name": "recoverMerkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "beneficiary",
"type": "address"
},
{
"internalType": "uint64",
"name": "seed",
"type": "uint64"
}
],
"name": "requestMinerId",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "reward",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "sealDataEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "difficultyAdjustRatio_",
"type": "uint256"
}
],
"name": "setDifficultyAdjustRatio",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "maxShards_",
"type": "uint64"
}
],
"name": "setMaxShards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "minDifficulty_",
"type": "uint256"
}
],
"name": "setMinDifficulty",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
}
],
"name": "setMiner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "nSubtasks_",
"type": "uint256"
}
],
"name": "setNumSubtasks",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_targetQuality",
"type": "uint256"
}
],
"name": "setQuality",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "targetMineBlocks_",
"type": "uint256"
}
],
"name": "setTargetMineBlocks",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "targetSubmissions_",
"type": "uint256"
}
],
"name": "setTargetSubmissions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
}
],
"name": "submit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetMineBlocks",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSubmissions",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSubmissionsNextEpoch",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
},
{
"internalType": "bytes32",
"name": "subtaskDigest",
"type": "bytes32"
}
],
"name": "testAll",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
}
],
"name": "transferBeneficial",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
}
],
"name": "unseal",
"outputs": [
{
"internalType": "bytes32[128]",
"name": "unsealedData",
"type": "bytes32[128]"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"bytecode": "0x60e06040523480156200001157600080fd5b5060405162003e1538038062003e15833981016040819052620000349162000052565b60016004909117818116156080526002161560a05260c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c051613d5d620000b86000396000818161052d01528181611bc9015261301a01526000818161055d01526117700152600081816105ea01526117330152613d5d6000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c80637eca568811610167578063b0628ee0116100ce578063ca15c87311610087578063ca15c873146106ad578063d547741f146106c0578063dddc61a8146106d3578063e1498cf9146106dc578063e282e27b146106ef578063ffbc9bd0146106f657600080fd5b8063b0628ee014610632578063b15d20da14610645578063b4988fd01461065a578063b4a932831461066d578063b51e039714610676578063b776a512146106a457600080fd5b8063a217fddf11610120578063a217fddf146105c1578063a8279182146105c9578063ad08fdfb146105d2578063adaa7a0f146105e5578063ae722e821461060c578063af31f9141461061f57600080fd5b80637eca56881461054f57806382975fe7146105585780638c0bca061461057f5780639010d07c1461059257806391d14854146105a55780639dc787a2146105b857600080fd5b8063331f3b9c1161020b57806359e7b5be116101c457806359e7b5be146104bc5780635bdca855146104dc5780636e9bb60b146104ef578063704d3c961461050257806378203ab6146105155780637bba7d611461052857600080fd5b8063331f3b9c14610448578063343aad821461045157806336568abe1461046457806339cd53ee146104775780633baebb75146104a057806348f61441146104b357600080fd5b8063228cb7331161025d578063228cb73314610340578063248a9ca31461036b578063296beba71461039d5780632a02573b146104195780632f2ff15d1461042c57806331223ba71461043f57600080fd5b806301ffc9a7146102a5578063047c13f5146102cd5780630c655e1f146102e2578063158ef93e146102f55780631600c6241461030257806316a4be6f14610315575b600080fd5b6102b86102b3366004613444565b6106fe565b60405190151581526020015b60405180910390f35b6102e06102db36600461349c565b610729565b005b6102e06102f03660046134cf565b610845565b6000546102b89060ff1681565b6102e06103103660046134cf565b6109a0565b600a54610328906001600160401b031681565b6040516001600160401b0390911681526020016102c4565b600454610353906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b61038f6103793660046134cf565b6000908152600160208190526040909120015490565b6040519081526020016102c4565b6103b06103ab3660046134cf565b610a10565b60408051825180518252602080820151818401528184015183850152606080830151818501526080808401519085015260a0928301519284019290925284015160c08301529183015160e08201529101516001600160401b0316610100820152610120016102c4565b6102e06104273660046134e8565b610c8d565b6102e061043a366004613503565b610d93565b61038f600b5481565b61038f60065481565b600354610353906001600160a01b031681565b6102e0610472366004613503565b610dbe565b6103536104853660046134cf565b600e602052600090815260409020546001600160a01b031681565b6102e06104ae366004613805565b610e3c565b61038f600d5481565b6104cf6104ca36600461384a565b6110de565b6040516102c49190613886565b6102e06104ea3660046134cf565b6110ef565b61038f6104fd3660046138b8565b61111c565b6102e06105103660046134cf565b61112f565b61038f6105233660046138fe565b61119d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f60085481565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f61058d366004613929565b6112ea565b6103536105a036600461396d565b6114ea565b6102b86105b3366004613503565b611502565b61038f60105481565b61038f600081565b61038f600c5481565b6102e06105e03660046134cf565b61152d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b6102e061061a36600461384a565b611567565b6102e061062d366004613929565b611a32565b6102e061064036600461398f565b611a64565b61038f600080516020613d0883398151915281565b6102e06106683660046139b9565b611b24565b61038f600f5481565b6102e06106843660046134cf565b6000908152600e6020526040902080546001600160a01b03191633179055565b61038f60075481565b61038f6106bb3660046134cf565b611c50565b6102e06106ce366004613503565b611c67565b61038f60095481565b6102e06106ea3660046134cf565b600d55565b6000610328565b6102b8611c8d565b60006001600160e01b03198216635a05180f60e01b1480610723575061072382611d33565b92915050565b6000610736600143613a0b565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156107eb5760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b600080516020613d0883398151915261085d81611d68565b600082116108b75760405162461bcd60e51b815260206004820152602160248201527f4e756d626572206f66207375627461736b732063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107e2565b600360009054906101000a90046001600160a01b03166001600160a01b031663f06820546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190613a1e565b821061099a5760405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207375627461736b73206d757374206265206c657373206044820152740e8d0c2dc40c4d8dec6d6e640e0cae440cae0dec6d605b1b60648201526084016107e2565b50601055565b600080516020613d088339815191526109b881611d68565b610100821115610a0a5760405162461bcd60e51b815260206004820152601d60248201527f746172676574206d696e6520626c6f636b206d757374203c3d2032353600000060448201526064016107e2565b50600655565b604080516101408101825260006080820181815260a0830182905260c0830182905260e0830182905261010083018290526101208301829052825260208201819052918101829052606081019190915281610aa65760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6000828152600e60205260409020546001600160a01b031680610b0b5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b600a546001600160401b0316606083015260035460408051635a325a9f60e11b815290516001600160a01b039092169163b464b53e9160048082019260c09290919082900301816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c9190613a37565b80835260105460a09091015160405160009291610bb6918790602001918252602082015260400190565b6040516020818303038152906040528051906020012060001c610bd99190613ac6565b9050600081846000015160200151610bf19190613ada565b90508043111580610c0c5750600654610c0a8243613a0b565b115b15610c1957505050919050565b835160a001516040805160208082019390935283408183015281518082038301815260609091018252805192019190912090850152600b548451511115610c65578351610c6590611d75565b600754610c73906002613aed565b600c541015610c8557600d5460208501525b505050919050565b600080516020613d08833981519152610ca581611d68565b6000826001600160401b031611610cfe5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016107e2565b610d09600183613b0c565b82166001600160401b0316600014610d6f5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016107e2565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008281526001602081905260409091200154610daf81611d68565b610db98383611e05565b505050565b6001600160a01b0381163314610e2e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e2565b610e388282611e27565b5050565b815160a082015114610e905760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016107e2565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610f035760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016107e2565b600754610f11906002613aed565b600c5410610f615760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016107e2565b6000610100610f7261040082613aed565b610f7c9190613b2c565b610100610f8b61040082613aed565b610f959190613b2c565b8360600151610fa49190613b2c565b610fae9190613aed565b6060840151909150610fc09082611e49565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110339190613b57565b905060006101006110476104006004613aed565b6110519190613b2c565b85608001516110609190613ada565b90508082600001516001600160801b031610801561108b57508082602001516001600160801b031610155b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016107e2565b5050505050565b6110e66133e8565b61072382612087565b600080516020613d0883398151915261110781611d68565b6008829055600b54600003610e385750600755565b60006111288383612136565b9392505050565b600080516020613d0883398151915261114781611d68565b600082116111975760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016107e2565b50600955565b6000806010548460a00151846040516020016111c3929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6111e69190613ac6565b905060008185602001516111fa9190613ada565b905080431161125e5760405162461bcd60e51b815260206004820152602a60248201527f4561726c696572207468616e206578706563746564207375627461736b20737460448201526930b93a10313637b1b59760b11b60648201526084016107e2565b60065461126b8243613a0b565b11156112b05760405162461bcd60e51b8152602060048201526014602482015273135a5b9948191958591b1a5b9948195e18d9595960621b60448201526064016107e2565b60a0850151604080516020810192909252824090820152606001604051602081830303815290604052805190602001209250505092915050565b604082015160009061133e5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016107e2565b60006040518060800160405280856040015181526020018560200151815260200184815260200161137286606001516123a9565b90529050600061138182612411565b905060006113926104006040613aed565b6113a0610400610100613aed565b6113aa9190613b2c565b6113b76104006004613aed565b6113c5610400610100613aed565b6113cf9190613b2c565b6113d99190613b2c565b8660a001516113e89190613ac6565b90506113f26133e8565b6113fa613407565b6114098860e001518486612489565b9250905061010061141d6104006004613aed565b6114279190613b2c565b8860a001516114369190613aed565b6114738260405160200161144a9190613bb1565b604051602081830303815290604052805190602001208a6060015161260690919063ffffffff16565b61147d9190613ada565b8860800151146114cf5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016107e2565b6114de8860a00151858461270c565b98975050505050505050565b6000828152600260205260408120611128908361287f565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613d0883398151915261154581611d68565b600f829055600061155461288b565b905080600d541115610db957600d555050565b60408101516115b15760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6040808201516000908152600e60205220546001600160a01b0316806116195760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116889190613a37565b905061169381611d75565b60006116a382856040015161119d565b90506116af8483610e3c565b600a5460608501516001600160401b03909116906116cc906128b2565b11156117295760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016107e2565b6117316133e8565b7f0000000000000000000000000000000000000000000000000000000000000000156117675761176085612087565b905061176e565b5060e08401515b7f0000000000000000000000000000000000000000000000000000000000000000156117f75760006117a08683612136565b9050836040015181146117f55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016107e2565b505b6117ff6133e8565b9050600061180d86846112ea565b9050600061182c856060015188606001516128fc90919063ffffffff16565b9050604081600d5461183e9190613b2c565b901b82111561188f5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016107e2565b60008281526005602052604090205460ff16156118ee5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016107e2565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061192761040080613aed565b61193390610400613aed565b61193e906008613aed565b6119489190613b2c565b89608001516119579190613b2c565b6040808b015190516001600160e01b031960e085901b16815260048101929092526001600160a01b038a1660248301526044820152606401600060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b5050506040808901518751600c5460808c015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38451600b55600c805460019190600090611a24908490613ada565b909155505050505050505050565b6000611a3d83612087565b9050611a498382612136565b50611a526133e8565b9050611a5e83836112ea565b50505050565b6000818152600e60205260409020546001600160a01b03163314611aca5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016107e2565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615611b835760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e2565b6000805460ff19166001178155611ba090611b9b3390565b611e05565b611bb8600080516020613d0883398151915233611e05565b611bc483600019613b2c565b600d557f000000000000000000000000000000000000000000000000000000000000000015611bf457600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff191660201790556001601055565b600081815260026020526040812061072390612a3c565b60008281526001602081905260409091200154611c8381611d68565b610db98383611e27565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d099190613a37565b9050600b5481600001511180611d2d5750600754611d28906002613aed565b600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061072357506301ffc9a760e01b6001600160e01b0319831614610723565b611d728133612a46565b50565b600b5481511015611dd65760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016107e2565b600b548151118015611dea57506000600b54115b15611d7257611df7612a9f565b6000600c5560085460075550565b611e0f8282612adf565b6000828152600260205260409020610db99082612b4a565b611e318282612b5f565b6000828152600260205260409020610db99082612bc6565b610100611e5861040080613aed565b611e6490610400613aed565b611e6f906008613aed565b611e799190613b2c565b8251611e859190613ac6565b15611ed25760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016107e2565b602082015182518291611ee491613ada565b1115611f2a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016107e2565b6000611f35836128b2565b610100611f4461040080613aed565b611f5090610400613aed565b611f5c90610400613aed565b611f67906008613aed565b611f719190613b2c565b611f7b9190613aed565b90508083602001511115611fc95760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016107e2565b6000611fd58383612bdb565b905080846020015110156120245760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016107e2565b83606001518460400151166001600160401b0316600014611a5e5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016107e2565b61208f6133e8565b60408083015160c0840151608085015192516120bf93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e08401805151909118835251906000906120f56104006004613aed565b6120ff9190613b2c565b905081836020600184030281015b8082101561212c5760208084209381018051909418920191825261210d565b5050505050919050565b6000805b60206121496104006004613aed565b6121539190613b2c565b8110156121a157610100602082028401208084836080811061217757612177613bd9565b6020020181815250505060206101006121909190613b2c565b61219a9082613ada565b905061213a565b5060006121b16020610100613b2c565b90505b60206121c36104006004613aed565b6121cd9190613b2c565b8110156122a05760005b60206121e66104006004613aed565b6121f09190613b2c565b81101561229757600084826080811061220b5761220b613bd9565b6020020151905060008561221f8585613ada565b6080811061222f5761222f613bd9565b602002015190508181604051602001612252929190918252602082015260400190565b6040516020818303038152906040528051906020012086846080811061227a5761227a613bd9565b6020020152506122909050600183901b82613ada565b90506121d7565b5060011b6121b4565b5081516122ab6133e8565b925060006101006122bf6104006004613aed565b6122c99190613b2c565b85608001516122d89190613b2c565b905060005b8561010001515181101561239f576000806122f9600285613ac6565b60000361232957849150876101000151838151811061231a5761231a613bd9565b6020026020010151905061234e565b876101000151838151811061234057612340613bd9565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846123879190613b2c565b935050506001816123989190613ada565b90506122dd565b5090949350505050565b600081600001518260200151836040015184606001516040516020016123f4949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b612419613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516107239385939092909160806001612bf1565b612491613407565b6124996133e8565b60006124a484612cb0565b90506124d28160406124b96104006004613aed565b6124c39190613b2c565b6124cd9088613aed565b612ccc565b60005b608081101561255f576124e9826001612ccc565b8681608081106124fb576124fb613bd9565b602002015182511883826080811061251557612515613bd9565b602002015286600182016080811061252f5761252f613bd9565b602002015182600160200201511883826001016080811061255257612552613bd9565b60200201526002016124d5565b506125f28160406125736104006004613aed565b61257d9190613b2c565b60018861258d6104006040613aed565b61259b610400610100613aed565b6125a59190613b2c565b6125b26104006004613aed565b6125c0610400610100613aed565b6125ca9190613b2c565b6125d49190613b2c565b6125de9190613a0b565b6125e89190613a0b565b6124cd9190613aed565b6125fb81612cb0565b925050935093915050565b60008061010061261861040082613aed565b6126229190613b2c565b84602001516126319190613b2c565b61263b9084613ac6565b6040850151606086015160208701519293508316179061010061266061040082613aed565b61266a9190613b2c565b61267d906001600160401b038416613aed565b11156126cb5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016107e2565b6101006126da61040082613aed565b6126e49190613b2c565b6126f7906001600160401b038316613aed565b85516127039190613ada565b95945050505050565b6000612716613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161277c9183918891906000608081612bf1565b9050612786613425565b6080600060206127996104006004613aed565b6127a39190613b2c565b6127ae906020613aed565b6127b9906080613ada565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156128535760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361283957600182535b60408660d58a6009600019fa61284e57600080fd5b6127eb565b50505050505050508260016008811061286e5761286e613bd9565b602002015198975050505050505050565b60006111288383612d92565b6000600f5460000361289e575060001990565b600f546128ad90600019613b2c565b905090565b606081015160009019815b6001600160401b038216156128ed576128d7600183613b0c565b90911690806128e581613bef565b9150506128bd565b600160ff9091161b9392505050565b60008061010061290e61040080613aed565b61291a90610400613aed565b61292690610400613aed565b612931906008613aed565b61293b9190613b2c565b83116129475782612983565b61010061295661040080613aed565b61296290610400613aed565b61296e90610400613aed565b612979906008613aed565b6129839190613b2c565b90506000612990856128b2565b61299a9085613b2c565b905060006101006129ad61040080613aed565b6129b990610400613aed565b6129c590610400613aed565b6129d0906008613aed565b6129da9190613b2c565b82116129e65781612a22565b6101006129f561040080613aed565b612a0190610400613aed565b612a0d90610400613aed565b612a18906008613aed565b612a229190613b2c565b9050612a3281604085901b613b2c565b9695505050505050565b6000610723825490565b612a508282611502565b610e3857612a5d81612dbc565b612a68836020612dce565b604051602001612a79929190613c32565b60408051601f198184030181529082905262461bcd60e51b82526107e291600401613ca7565b600c5460009015612acc5760006010600d54901c9050612ac481600654600c54612f69565b915050612ad6565b506001600160f01b035b611d7281613018565b612ae98282611502565b610e385760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611128836001600160a01b0384166130fd565b612b698282611502565b15610e385760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611128836001600160a01b03841661314c565b6000818310612bea5781611128565b5090919050565b612bf9613407565b600c6000612c0685613246565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa612ca257600080fd5b505050979650505050505050565b612cb8613407565b815181526020918201519181019190915290565b612cd4613425565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b84811015612d785760408260d5856009600019fa612d7057600080fd5b600101612d53565b505050606081015183526080015160209092019190915250565b6000826000018281548110612da957612da9613bd9565b9060005260206000200154905092915050565b60606107236001600160a01b03831660145b60606000612ddd836002613aed565b612de8906002613ada565b6001600160401b03811115612dff57612dff613526565b6040519080825280601f01601f191660200182016040528015612e29576020820181803683370190505b509050600360fc1b81600081518110612e4457612e44613bd9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612e7357612e73613bd9565b60200101906001600160f81b031916908160001a9053506000612e97846002613aed565b612ea2906001613ada565b90505b6001811115612f1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ed657612ed6613bd9565b1a60f81b828281518110612eec57612eec613bd9565b60200101906001600160f81b031916908160001a90535060049490941c93612f1381613cda565b9050612ea5565b5083156111285760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e2565b6000808060001985870985870292508281108382030391505080600003612fa357838281612f9957612f99613ab0565b0492505050611128565b808411612faf57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b7f0000000000000000000000000000000000000000000000000000000000000000156130415750565b600d5460095460109190911c906000818461305d600183613a0b565b6130679086613aed565b6130719190613ada565b61307b9190613b2c565b9050613088836002613aed565b81111561309d5761309a836002613aed565b90505b6130a8600284613b2c565b8110156130bd576130ba600284613b2c565b90505b6001600160f01b038111156130d657506001600160f01b035b601081901b600d5560006130e861288b565b905080600d5411156110d757600d5550505050565b600081815260018301602052604081205461314457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610723565b506000610723565b60008181526001830160205260408120548015613235576000613170600183613a0b565b855490915060009061318490600190613a0b565b90508181146131e95760008660000182815481106131a4576131a4613bd9565b90600052602060002001549050808760000184815481106131c7576131c7613bd9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806131fa576131fa613cf1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610723565b6000915050610723565b5092915050565b61324e613407565b6201000082101561329257600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b6401000000008210156132d257600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b03191661327a565b680100000000000000008210156132ec5761327a82613382565b600160801b82101561333c576001600160401b038216604083901c61331082613382565b6001600160c01b031916835261332581613382565b6001600160c01b03191660208401525061337d9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016107e2565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b60006020828403121561345657600080fd5b81356001600160e01b03198116811461112857600080fd5b80356001600160a01b038116811461337d57600080fd5b80356001600160401b038116811461337d57600080fd5b600080604083850312156134af57600080fd5b6134b88361346e565b91506134c660208401613485565b90509250929050565b6000602082840312156134e157600080fd5b5035919050565b6000602082840312156134fa57600080fd5b61112882613485565b6000806040838503121561351657600080fd5b823591506134c66020840161346e565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561355f5761355f613526565b60405290565b60006080828403121561357757600080fd5b604051608081018181106001600160401b038211171561359957613599613526565b806040525080915082358152602083013560208201526135bb60408401613485565b60408201526135cc60608401613485565b60608201525092915050565b600082601f8301126135e957600080fd5b6040516110008082018281106001600160401b038211171561360d5761360d613526565b6040528301818582111561362057600080fd5b845b8281101561363a578035825260209182019101613622565b509195945050505050565b600082601f83011261365657600080fd5b813560206001600160401b038083111561367257613672613526565b8260051b604051601f19603f8301168101818110848211171561369757613697613526565b6040529384528581018301938381019250878511156136b557600080fd5b83870191505b848210156136d4578135835291830191908301906136bb565b979650505050505050565b600061116082840312156136f257600080fd5b6136fa61353c565b90508135815260208201356020820152604082013560408201526137218360608401613565565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526137558461014085016135d8565b60e08301526111408301356001600160401b0381111561377457600080fd5b61378085828601613645565b82840152505092915050565b600060c0828403121561379e57600080fd5b60405160c081018181106001600160401b03821117156137c0576137c0613526565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561381857600080fd5b82356001600160401b0381111561382e57600080fd5b61383a858286016136df565b9250506134c6846020850161378c565b60006020828403121561385c57600080fd5b81356001600160401b0381111561387257600080fd5b61387e848285016136df565b949350505050565b6110008101818360005b60808110156138af578151835260209283019290910190600101613890565b50505092915050565b60008061102083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b6138ee858286016136df565b9250506134c684602085016135d8565b60008060e0838503121561391157600080fd5b61391b848461378c565b9460c0939093013593505050565b6000806040838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e858286016136df565b95602094909401359450505050565b6000806040838503121561398057600080fd5b50508035926020909101359150565b600080604083850312156139a257600080fd5b6139ab8361346e565b946020939093013593505050565b6000806000606084860312156139ce57600080fd5b833592506139de6020850161346e565b91506139ec6040850161346e565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b81810381811115610723576107236139f5565b600060208284031215613a3057600080fd5b5051919050565b600060c08284031215613a4957600080fd5b60405160c081018181106001600160401b0382111715613a6b57613a6b613526565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b634e487b7160e01b600052601260045260246000fd5b600082613ad557613ad5613ab0565b500690565b80820180821115610723576107236139f5565b6000816000190483118215151615613b0757613b076139f5565b500290565b6001600160401b0382811682821603908082111561323f5761323f6139f5565b600082613b3b57613b3b613ab0565b500490565b80516001600160801b038116811461337d57600080fd5b600060408284031215613b6957600080fd5b604051604081018181106001600160401b0382111715613b8b57613b8b613526565b604052613b9783613b40565b8152613ba560208401613b40565b60208201529392505050565b60408101818360005b60028110156138af578151835260209283019290910190600101613bba565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103613c0557613c056139f5565b60010192915050565b60005b83811015613c29578181015183820152602001613c11565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613c6a816017850160208801613c0e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613c9b816028840160208801613c0e565b01602801949350505050565b6020815260008251806020840152613cc6816040850160208701613c0e565b601f01601f19169190910160400192915050565b600081613ce957613ce96139f5565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220ce17e5f0a8046f0225a4af7d7ea76e937433618fdb6e49c325b35f0cbf1ca06a64736f6c63430008100033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102a05760003560e01c80637eca568811610167578063b0628ee0116100ce578063ca15c87311610087578063ca15c873146106ad578063d547741f146106c0578063dddc61a8146106d3578063e1498cf9146106dc578063e282e27b146106ef578063ffbc9bd0146106f657600080fd5b8063b0628ee014610632578063b15d20da14610645578063b4988fd01461065a578063b4a932831461066d578063b51e039714610676578063b776a512146106a457600080fd5b8063a217fddf11610120578063a217fddf146105c1578063a8279182146105c9578063ad08fdfb146105d2578063adaa7a0f146105e5578063ae722e821461060c578063af31f9141461061f57600080fd5b80637eca56881461054f57806382975fe7146105585780638c0bca061461057f5780639010d07c1461059257806391d14854146105a55780639dc787a2146105b857600080fd5b8063331f3b9c1161020b57806359e7b5be116101c457806359e7b5be146104bc5780635bdca855146104dc5780636e9bb60b146104ef578063704d3c961461050257806378203ab6146105155780637bba7d611461052857600080fd5b8063331f3b9c14610448578063343aad821461045157806336568abe1461046457806339cd53ee146104775780633baebb75146104a057806348f61441146104b357600080fd5b8063228cb7331161025d578063228cb73314610340578063248a9ca31461036b578063296beba71461039d5780632a02573b146104195780632f2ff15d1461042c57806331223ba71461043f57600080fd5b806301ffc9a7146102a5578063047c13f5146102cd5780630c655e1f146102e2578063158ef93e146102f55780631600c6241461030257806316a4be6f14610315575b600080fd5b6102b86102b3366004613444565b6106fe565b60405190151581526020015b60405180910390f35b6102e06102db36600461349c565b610729565b005b6102e06102f03660046134cf565b610845565b6000546102b89060ff1681565b6102e06103103660046134cf565b6109a0565b600a54610328906001600160401b031681565b6040516001600160401b0390911681526020016102c4565b600454610353906001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b61038f6103793660046134cf565b6000908152600160208190526040909120015490565b6040519081526020016102c4565b6103b06103ab3660046134cf565b610a10565b60408051825180518252602080820151818401528184015183850152606080830151818501526080808401519085015260a0928301519284019290925284015160c08301529183015160e08201529101516001600160401b0316610100820152610120016102c4565b6102e06104273660046134e8565b610c8d565b6102e061043a366004613503565b610d93565b61038f600b5481565b61038f60065481565b600354610353906001600160a01b031681565b6102e0610472366004613503565b610dbe565b6103536104853660046134cf565b600e602052600090815260409020546001600160a01b031681565b6102e06104ae366004613805565b610e3c565b61038f600d5481565b6104cf6104ca36600461384a565b6110de565b6040516102c49190613886565b6102e06104ea3660046134cf565b6110ef565b61038f6104fd3660046138b8565b61111c565b6102e06105103660046134cf565b61112f565b61038f6105233660046138fe565b61119d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f60085481565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b61038f61058d366004613929565b6112ea565b6103536105a036600461396d565b6114ea565b6102b86105b3366004613503565b611502565b61038f60105481565b61038f600081565b61038f600c5481565b6102e06105e03660046134cf565b61152d565b6102b87f000000000000000000000000000000000000000000000000000000000000000081565b6102e061061a36600461384a565b611567565b6102e061062d366004613929565b611a32565b6102e061064036600461398f565b611a64565b61038f600080516020613d0883398151915281565b6102e06106683660046139b9565b611b24565b61038f600f5481565b6102e06106843660046134cf565b6000908152600e6020526040902080546001600160a01b03191633179055565b61038f60075481565b61038f6106bb3660046134cf565b611c50565b6102e06106ce366004613503565b611c67565b61038f60095481565b6102e06106ea3660046134cf565b600d55565b6000610328565b6102b8611c8d565b60006001600160e01b03198216635a05180f60e01b1480610723575061072382611d33565b92915050565b6000610736600143613a0b565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156107eb5760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b600080516020613d0883398151915261085d81611d68565b600082116108b75760405162461bcd60e51b815260206004820152602160248201527f4e756d626572206f66207375627461736b732063616e6e6f74206265207a65726044820152606f60f81b60648201526084016107e2565b600360009054906101000a90046001600160a01b03166001600160a01b031663f06820546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092e9190613a1e565b821061099a5760405162461bcd60e51b815260206004820152603560248201527f4e756d626572206f66207375627461736b73206d757374206265206c657373206044820152740e8d0c2dc40c4d8dec6d6e640e0cae440cae0dec6d605b1b60648201526084016107e2565b50601055565b600080516020613d088339815191526109b881611d68565b610100821115610a0a5760405162461bcd60e51b815260206004820152601d60248201527f746172676574206d696e6520626c6f636b206d757374203c3d2032353600000060448201526064016107e2565b50600655565b604080516101408101825260006080820181815260a0830182905260c0830182905260e0830182905261010083018290526101208301829052825260208201819052918101829052606081019190915281610aa65760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6000828152600e60205260409020546001600160a01b031680610b0b5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b600a546001600160401b0316606083015260035460408051635a325a9f60e11b815290516001600160a01b039092169163b464b53e9160048082019260c09290919082900301816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c9190613a37565b80835260105460a09091015160405160009291610bb6918790602001918252602082015260400190565b6040516020818303038152906040528051906020012060001c610bd99190613ac6565b9050600081846000015160200151610bf19190613ada565b90508043111580610c0c5750600654610c0a8243613a0b565b115b15610c1957505050919050565b835160a001516040805160208082019390935283408183015281518082038301815260609091018252805192019190912090850152600b548451511115610c65578351610c6590611d75565b600754610c73906002613aed565b600c541015610c8557600d5460208501525b505050919050565b600080516020613d08833981519152610ca581611d68565b6000826001600160401b031611610cfe5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016107e2565b610d09600183613b0c565b82166001600160401b0316600014610d6f5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016107e2565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b60008281526001602081905260409091200154610daf81611d68565b610db98383611e05565b505050565b6001600160a01b0381163314610e2e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016107e2565b610e388282611e27565b5050565b815160a082015114610e905760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016107e2565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a0015103610f035760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016107e2565b600754610f11906002613aed565b600c5410610f615760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016107e2565b6000610100610f7261040082613aed565b610f7c9190613b2c565b610100610f8b61040082613aed565b610f959190613b2c565b8360600151610fa49190613b2c565b610fae9190613aed565b6060840151909150610fc09082611e49565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110339190613b57565b905060006101006110476104006004613aed565b6110519190613b2c565b85608001516110609190613ada565b90508082600001516001600160801b031610801561108b57508082602001516001600160801b031610155b6110d75760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016107e2565b5050505050565b6110e66133e8565b61072382612087565b600080516020613d0883398151915261110781611d68565b6008829055600b54600003610e385750600755565b60006111288383612136565b9392505050565b600080516020613d0883398151915261114781611d68565b600082116111975760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016107e2565b50600955565b6000806010548460a00151846040516020016111c3929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c6111e69190613ac6565b905060008185602001516111fa9190613ada565b905080431161125e5760405162461bcd60e51b815260206004820152602a60248201527f4561726c696572207468616e206578706563746564207375627461736b20737460448201526930b93a10313637b1b59760b11b60648201526084016107e2565b60065461126b8243613a0b565b11156112b05760405162461bcd60e51b8152602060048201526014602482015273135a5b9948191958591b1a5b9948195e18d9595960621b60448201526064016107e2565b60a0850151604080516020810192909252824090820152606001604051602081830303815290604052805190602001209250505092915050565b604082015160009061133e5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016107e2565b60006040518060800160405280856040015181526020018560200151815260200184815260200161137286606001516123a9565b90529050600061138182612411565b905060006113926104006040613aed565b6113a0610400610100613aed565b6113aa9190613b2c565b6113b76104006004613aed565b6113c5610400610100613aed565b6113cf9190613b2c565b6113d99190613b2c565b8660a001516113e89190613ac6565b90506113f26133e8565b6113fa613407565b6114098860e001518486612489565b9250905061010061141d6104006004613aed565b6114279190613b2c565b8860a001516114369190613aed565b6114738260405160200161144a9190613bb1565b604051602081830303815290604052805190602001208a6060015161260690919063ffffffff16565b61147d9190613ada565b8860800151146114cf5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016107e2565b6114de8860a00151858461270c565b98975050505050505050565b6000828152600260205260408120611128908361287f565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600080516020613d0883398151915261154581611d68565b600f829055600061155461288b565b905080600d541115610db957600d555050565b60408101516115b15760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016107e2565b6040808201516000908152600e60205220546001600160a01b0316806116195760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016107e2565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015611664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116889190613a37565b905061169381611d75565b60006116a382856040015161119d565b90506116af8483610e3c565b600a5460608501516001600160401b03909116906116cc906128b2565b11156117295760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016107e2565b6117316133e8565b7f0000000000000000000000000000000000000000000000000000000000000000156117675761176085612087565b905061176e565b5060e08401515b7f0000000000000000000000000000000000000000000000000000000000000000156117f75760006117a08683612136565b9050836040015181146117f55760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016107e2565b505b6117ff6133e8565b9050600061180d86846112ea565b9050600061182c856060015188606001516128fc90919063ffffffff16565b9050604081600d5461183e9190613b2c565b901b82111561188f5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016107e2565b60008281526005602052604090205460ff16156118ee5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016107e2565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c61010061192761040080613aed565b61193390610400613aed565b61193e906008613aed565b6119489190613b2c565b89608001516119579190613b2c565b6040808b015190516001600160e01b031960e085901b16815260048101929092526001600160a01b038a1660248301526044820152606401600060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b5050506040808901518751600c5460808c015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38451600b55600c805460019190600090611a24908490613ada565b909155505050505050505050565b6000611a3d83612087565b9050611a498382612136565b50611a526133e8565b9050611a5e83836112ea565b50505050565b6000818152600e60205260409020546001600160a01b03163314611aca5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016107e2565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615611b835760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016107e2565b6000805460ff19166001178155611ba090611b9b3390565b611e05565b611bb8600080516020613d0883398151915233611e05565b611bc483600019613b2c565b600d557f000000000000000000000000000000000000000000000000000000000000000015611bf457600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff191660201790556001601055565b600081815260026020526040812061072390612a3c565b60008281526001602081905260409091200154611c8381611d68565b610db98383611e27565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af1158015611ce5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d099190613a37565b9050600b5481600001511180611d2d5750600754611d28906002613aed565b600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b148061072357506301ffc9a760e01b6001600160e01b0319831614610723565b611d728133612a46565b50565b600b5481511015611dd65760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016107e2565b600b548151118015611dea57506000600b54115b15611d7257611df7612a9f565b6000600c5560085460075550565b611e0f8282612adf565b6000828152600260205260409020610db99082612b4a565b611e318282612b5f565b6000828152600260205260409020610db99082612bc6565b610100611e5861040080613aed565b611e6490610400613aed565b611e6f906008613aed565b611e799190613b2c565b8251611e859190613ac6565b15611ed25760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016107e2565b602082015182518291611ee491613ada565b1115611f2a5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016107e2565b6000611f35836128b2565b610100611f4461040080613aed565b611f5090610400613aed565b611f5c90610400613aed565b611f67906008613aed565b611f719190613b2c565b611f7b9190613aed565b90508083602001511115611fc95760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016107e2565b6000611fd58383612bdb565b905080846020015110156120245760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016107e2565b83606001518460400151166001600160401b0316600014611a5e5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016107e2565b61208f6133e8565b60408083015160c0840151608085015192516120bf93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209182012060e08401805151909118835251906000906120f56104006004613aed565b6120ff9190613b2c565b905081836020600184030281015b8082101561212c5760208084209381018051909418920191825261210d565b5050505050919050565b6000805b60206121496104006004613aed565b6121539190613b2c565b8110156121a157610100602082028401208084836080811061217757612177613bd9565b6020020181815250505060206101006121909190613b2c565b61219a9082613ada565b905061213a565b5060006121b16020610100613b2c565b90505b60206121c36104006004613aed565b6121cd9190613b2c565b8110156122a05760005b60206121e66104006004613aed565b6121f09190613b2c565b81101561229757600084826080811061220b5761220b613bd9565b6020020151905060008561221f8585613ada565b6080811061222f5761222f613bd9565b602002015190508181604051602001612252929190918252602082015260400190565b6040516020818303038152906040528051906020012086846080811061227a5761227a613bd9565b6020020152506122909050600183901b82613ada565b90506121d7565b5060011b6121b4565b5081516122ab6133e8565b925060006101006122bf6104006004613aed565b6122c99190613b2c565b85608001516122d89190613b2c565b905060005b8561010001515181101561239f576000806122f9600285613ac6565b60000361232957849150876101000151838151811061231a5761231a613bd9565b6020026020010151905061234e565b876101000151838151811061234057612340613bd9565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846123879190613b2c565b935050506001816123989190613ada565b90506122dd565b5090949350505050565b600081600001518260200151836040015184606001516040516020016123f4949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b612419613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516107239385939092909160806001612bf1565b612491613407565b6124996133e8565b60006124a484612cb0565b90506124d28160406124b96104006004613aed565b6124c39190613b2c565b6124cd9088613aed565b612ccc565b60005b608081101561255f576124e9826001612ccc565b8681608081106124fb576124fb613bd9565b602002015182511883826080811061251557612515613bd9565b602002015286600182016080811061252f5761252f613bd9565b602002015182600160200201511883826001016080811061255257612552613bd9565b60200201526002016124d5565b506125f28160406125736104006004613aed565b61257d9190613b2c565b60018861258d6104006040613aed565b61259b610400610100613aed565b6125a59190613b2c565b6125b26104006004613aed565b6125c0610400610100613aed565b6125ca9190613b2c565b6125d49190613b2c565b6125de9190613a0b565b6125e89190613a0b565b6124cd9190613aed565b6125fb81612cb0565b925050935093915050565b60008061010061261861040082613aed565b6126229190613b2c565b84602001516126319190613b2c565b61263b9084613ac6565b6040850151606086015160208701519293508316179061010061266061040082613aed565b61266a9190613b2c565b61267d906001600160401b038416613aed565b11156126cb5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016107e2565b6101006126da61040082613aed565b6126e49190613b2c565b6126f7906001600160401b038316613aed565b85516127039190613ada565b95945050505050565b6000612716613407565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161277c9183918891906000608081612bf1565b9050612786613425565b6080600060206127996104006004613aed565b6127a39190613b2c565b6127ae906020613aed565b6127b9906080613ada565b9050601c8301601f8401602085016060860160e0870160e1880160f089018c600c87538b51865260208c015160208701525b888a10156128535760808a01995060ff8a1684538960081c835380518552602081015160208601526040810151604086015260608101516060860152608081019050888a0361283957600182535b60408660d58a6009600019fa61284e57600080fd5b6127eb565b50505050505050508260016008811061286e5761286e613bd9565b602002015198975050505050505050565b60006111288383612d92565b6000600f5460000361289e575060001990565b600f546128ad90600019613b2c565b905090565b606081015160009019815b6001600160401b038216156128ed576128d7600183613b0c565b90911690806128e581613bef565b9150506128bd565b600160ff9091161b9392505050565b60008061010061290e61040080613aed565b61291a90610400613aed565b61292690610400613aed565b612931906008613aed565b61293b9190613b2c565b83116129475782612983565b61010061295661040080613aed565b61296290610400613aed565b61296e90610400613aed565b612979906008613aed565b6129839190613b2c565b90506000612990856128b2565b61299a9085613b2c565b905060006101006129ad61040080613aed565b6129b990610400613aed565b6129c590610400613aed565b6129d0906008613aed565b6129da9190613b2c565b82116129e65781612a22565b6101006129f561040080613aed565b612a0190610400613aed565b612a0d90610400613aed565b612a18906008613aed565b612a229190613b2c565b9050612a3281604085901b613b2c565b9695505050505050565b6000610723825490565b612a508282611502565b610e3857612a5d81612dbc565b612a68836020612dce565b604051602001612a79929190613c32565b60408051601f198184030181529082905262461bcd60e51b82526107e291600401613ca7565b600c5460009015612acc5760006010600d54901c9050612ac481600654600c54612f69565b915050612ad6565b506001600160f01b035b611d7281613018565b612ae98282611502565b610e385760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000611128836001600160a01b0384166130fd565b612b698282611502565b15610e385760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611128836001600160a01b03841661314c565b6000818310612bea5781611128565b5090919050565b612bf9613407565b600c6000612c0685613246565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa612ca257600080fd5b505050979650505050505050565b612cb8613407565b815181526020918201519181019190915290565b612cd4613425565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa56020808301919091527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6040830152835160608301908152908401516080830152601c820190600c601f840153604060e0840153600160f084015360005b84811015612d785760408260d5856009600019fa612d7057600080fd5b600101612d53565b505050606081015183526080015160209092019190915250565b6000826000018281548110612da957612da9613bd9565b9060005260206000200154905092915050565b60606107236001600160a01b03831660145b60606000612ddd836002613aed565b612de8906002613ada565b6001600160401b03811115612dff57612dff613526565b6040519080825280601f01601f191660200182016040528015612e29576020820181803683370190505b509050600360fc1b81600081518110612e4457612e44613bd9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612e7357612e73613bd9565b60200101906001600160f81b031916908160001a9053506000612e97846002613aed565b612ea2906001613ada565b90505b6001811115612f1a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612ed657612ed6613bd9565b1a60f81b828281518110612eec57612eec613bd9565b60200101906001600160f81b031916908160001a90535060049490941c93612f1381613cda565b9050612ea5565b5083156111285760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107e2565b6000808060001985870985870292508281108382030391505080600003612fa357838281612f9957612f99613ab0565b0492505050611128565b808411612faf57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b7f0000000000000000000000000000000000000000000000000000000000000000156130415750565b600d5460095460109190911c906000818461305d600183613a0b565b6130679086613aed565b6130719190613ada565b61307b9190613b2c565b9050613088836002613aed565b81111561309d5761309a836002613aed565b90505b6130a8600284613b2c565b8110156130bd576130ba600284613b2c565b90505b6001600160f01b038111156130d657506001600160f01b035b601081901b600d5560006130e861288b565b905080600d5411156110d757600d5550505050565b600081815260018301602052604081205461314457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610723565b506000610723565b60008181526001830160205260408120548015613235576000613170600183613a0b565b855490915060009061318490600190613a0b565b90508181146131e95760008660000182815481106131a4576131a4613bd9565b90600052602060002001549050808760000184815481106131c7576131c7613bd9565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806131fa576131fa613cf1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610723565b6000915050610723565b5092915050565b61324e613407565b6201000082101561329257600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b6401000000008210156132d257600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b03191661327a565b680100000000000000008210156132ec5761327a82613382565b600160801b82101561333c576001600160401b038216604083901c61331082613382565b6001600160c01b031916835261332581613382565b6001600160c01b03191660208401525061337d9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016107e2565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b60006020828403121561345657600080fd5b81356001600160e01b03198116811461112857600080fd5b80356001600160a01b038116811461337d57600080fd5b80356001600160401b038116811461337d57600080fd5b600080604083850312156134af57600080fd5b6134b88361346e565b91506134c660208401613485565b90509250929050565b6000602082840312156134e157600080fd5b5035919050565b6000602082840312156134fa57600080fd5b61112882613485565b6000806040838503121561351657600080fd5b823591506134c66020840161346e565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b038111828210171561355f5761355f613526565b60405290565b60006080828403121561357757600080fd5b604051608081018181106001600160401b038211171561359957613599613526565b806040525080915082358152602083013560208201526135bb60408401613485565b60408201526135cc60608401613485565b60608201525092915050565b600082601f8301126135e957600080fd5b6040516110008082018281106001600160401b038211171561360d5761360d613526565b6040528301818582111561362057600080fd5b845b8281101561363a578035825260209182019101613622565b509195945050505050565b600082601f83011261365657600080fd5b813560206001600160401b038083111561367257613672613526565b8260051b604051601f19603f8301168101818110848211171561369757613697613526565b6040529384528581018301938381019250878511156136b557600080fd5b83870191505b848210156136d4578135835291830191908301906136bb565b979650505050505050565b600061116082840312156136f257600080fd5b6136fa61353c565b90508135815260208201356020820152604082013560408201526137218360608401613565565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526137558461014085016135d8565b60e08301526111408301356001600160401b0381111561377457600080fd5b61378085828601613645565b82840152505092915050565b600060c0828403121561379e57600080fd5b60405160c081018181106001600160401b03821117156137c0576137c0613526565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135608082015260a083013560a08201525092915050565b60008060e0838503121561381857600080fd5b82356001600160401b0381111561382e57600080fd5b61383a858286016136df565b9250506134c6846020850161378c565b60006020828403121561385c57600080fd5b81356001600160401b0381111561387257600080fd5b61387e848285016136df565b949350505050565b6110008101818360005b60808110156138af578151835260209283019290910190600101613890565b50505092915050565b60008061102083850312156138cc57600080fd5b82356001600160401b038111156138e257600080fd5b6138ee858286016136df565b9250506134c684602085016135d8565b60008060e0838503121561391157600080fd5b61391b848461378c565b9460c0939093013593505050565b6000806040838503121561393c57600080fd5b82356001600160401b0381111561395257600080fd5b61395e858286016136df565b95602094909401359450505050565b6000806040838503121561398057600080fd5b50508035926020909101359150565b600080604083850312156139a257600080fd5b6139ab8361346e565b946020939093013593505050565b6000806000606084860312156139ce57600080fd5b833592506139de6020850161346e565b91506139ec6040850161346e565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b81810381811115610723576107236139f5565b600060208284031215613a3057600080fd5b5051919050565b600060c08284031215613a4957600080fd5b60405160c081018181106001600160401b0382111715613a6b57613a6b613526565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b634e487b7160e01b600052601260045260246000fd5b600082613ad557613ad5613ab0565b500690565b80820180821115610723576107236139f5565b6000816000190483118215151615613b0757613b076139f5565b500290565b6001600160401b0382811682821603908082111561323f5761323f6139f5565b600082613b3b57613b3b613ab0565b500490565b80516001600160801b038116811461337d57600080fd5b600060408284031215613b6957600080fd5b604051604081018181106001600160401b0382111715613b8b57613b8b613526565b604052613b9783613b40565b8152613ba560208401613b40565b60208201529392505050565b60408101818360005b60028110156138af578151835260209283019290910190600101613bba565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff8103613c0557613c056139f5565b60010192915050565b60005b83811015613c29578181015183820152602001613c11565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613c6a816017850160208801613c0e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613c9b816028840160208801613c0e565b01602801949350505050565b6020815260008251806020840152613cc6816040850160208701613c0e565b601f01601f19169190910160400192915050565b600081613ce957613ce96139f5565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a2646970667358221220ce17e5f0a8046f0225a4af7d7ea76e937433618fdb6e49c325b35f0cbf1ca06a64736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}