dgf-prototype/backend/contractArtifacts/DAO.json

828 lines
115 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "DAO",
"sourceName": "contracts/core/DAO.sol",
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "id",
"type": "string"
}
],
"name": "PostAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
}
],
"name": "ValidationPoolInitiated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "votePasses",
"type": "bool"
},
{
"indexed": false,
"internalType": "bool",
"name": "quorumMet",
"type": "bool"
}
],
"name": "ValidationPoolResolved",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "weightPPM",
"type": "uint256"
},
{
"internalType": "address",
"name": "authorAddress",
"type": "address"
}
],
"internalType": "struct Author[]",
"name": "authors",
"type": "tuple[]"
},
{
"internalType": "string",
"name": "contentId",
"type": "string"
},
{
"components": [
{
"internalType": "int256",
"name": "weightPPM",
"type": "int256"
},
{
"internalType": "string",
"name": "targetPostId",
"type": "string"
}
],
"internalType": "struct Citation[]",
"name": "citations",
"type": "tuple[]"
}
],
"name": "addPost",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "inFavor",
"type": "bool"
}
],
"name": "delegatedStakeOnValidationPool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
}
],
"name": "evaluateOutcome",
"outputs": [
{
"internalType": "bool",
"name": "votePasses",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "postId",
"type": "string"
}
],
"name": "getPostAuthors",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "weightPPM",
"type": "uint256"
},
{
"internalType": "address",
"name": "authorAddress",
"type": "address"
}
],
"internalType": "struct Author[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "postId",
"type": "string"
},
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"internalType": "uint256[2]",
"name": "quorum",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "winRatio",
"type": "uint256[2]"
},
{
"internalType": "uint256",
"name": "bindingPercent",
"type": "uint256"
},
{
"internalType": "bool",
"name": "redistributeLosingStakes",
"type": "bool"
},
{
"internalType": "bool",
"name": "callbackOnValidate",
"type": "bool"
},
{
"internalType": "bytes",
"name": "callbackData",
"type": "bytes"
}
],
"name": "initiateValidationPool",
"outputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isMember",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "memberCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "members",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "postCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "postIds",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "posts",
"outputs": [
{
"internalType": "string",
"name": "id",
"type": "string"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "reputation",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
}
],
"name": "stakeAvailability",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "poolIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "inFavor",
"type": "bool"
}
],
"name": "stakeOnValidationPool",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "validationPoolCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "validationPools",
"outputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "string",
"name": "postId",
"type": "string"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "minted",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "stakeCount",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"internalType": "uint256[2]",
"name": "quorum",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "winRatio",
"type": "uint256[2]"
},
{
"internalType": "uint256",
"name": "bindingPercent",
"type": "uint256"
},
{
"internalType": "bool",
"name": "redistributeLosingStakes",
"type": "bool"
}
],
"internalType": "struct ValidationPoolParams",
"name": "params",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "fee",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endTime",
"type": "uint256"
},
{
"internalType": "bool",
"name": "resolved",
"type": "bool"
},
{
"internalType": "bool",
"name": "outcome",
"type": "bool"
},
{
"internalType": "bool",
"name": "callbackOnValidate",
"type": "bool"
},
{
"internalType": "bytes",
"name": "callbackData",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615f4780620004b96000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b6c565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c36565b6106e0565b6040516101af9190613c91565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cbb565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cbb565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613cd6565b61070f565b6040516102429190613c91565b60405180910390f35b34801561025757600080fd5b506102606110ed565b60405161026d9190613cbb565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613d03565b6110f7565b6040516102aa9190613c91565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d82565b611134565b005b3480156102e857600080fd5b506102f161115d565b6040516102fe9190613df1565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613cd6565b611166565b60405161033b9190613b6c565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613cd6565b611212565b6040516103789190613e1b565b60405180910390f35b34801561038d57600080fd5b50610396611245565b6040516103a39190613cbb565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e36565b61124b565b6040516103e09190613cbb565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e63565b611293565b60405161041d9190613c91565b60405180910390f35b34801561043257600080fd5b5061043b61131a565b6040516104489190613b6c565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613eb6565b6113ac565b005b610494600480360381019061048f9190613ffa565b6113e1565b6040516104a19190613cbb565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e36565b61189b565b6040516104de9190613c91565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613cd6565b6118bb565b6040516105269c9b9a9998979695949392919061426a565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c36565b611b35565b6040516105639190613c91565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190614334565b611b72565b6040516105a0919061446e565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614490565b611c5b565b6040516105dd9190613cbb565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061457c565b611ce2565b005b34801561061b57600080fd5b5061063660048036038101906106319190614760565b6121b5565b604051610645939291906147a9565b60405180910390f35b60606003805461065d90614816565b80601f016020809104026020016040519081016040528092919081815260200182805461068990614816565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb61229d565b90506106f88185856122a5565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614893565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148e2565b93506107ee565b8160020154836107eb91906148e2565b92505b808060010191505061078a565b506002846003015461080d9190614945565b8361081891906148e2565b92506002846003015461082b9190614945565b8261083691906148e2565b915060006002856003015461084b9190614976565b146108605760018361085d91906148e2565b92505b83600e015442118061088357506108756110ed565b828461088191906148e2565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a19565b60405180910390fd5b836006016001016000600281106108dc576108db614a39565b5b01546108e66110ed565b6108f09190614a68565b82846108fc91906148e2565b8560060160010160016002811061091657610915614a39565b5b01546109229190614a68565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614aaa565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b7a565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614be9565b505b60009450505050506110e8565b83600601600301600060028110610a6c57610a6b614a39565b5b01548284610a7a91906148e2565b610a849190614a68565b84600601600301600160028110610a9e57610a9d614a39565b5b015484610aab9190614a68565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614aaa565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a68565b610b9f9190614945565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122b7565b8084610bf691906148e2565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124dc565b5b505b8080600101915050610b3b565b508715610e395760028760030154610c539190614945565b82610c5e91906148e2565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a68565b610ce79190614945565b610cf19190614a68565b610cfb9190614945565b90508083610d0991906148e2565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b7565b505b8080600101915050610c63565b5060008183610d589190614c16565b9050600060028960030154610d6d9190614976565b14610d8257600181610d7f91906148e2565b90505b610e33886001018054610d9490614816565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090614816565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e249190614945565b610e2e91906148e2565b61255e565b50610f51565b866003015482610e4991906148e2565b915060005b8760050154811015610f4f5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610ea657508460010160009054906101000a900460ff161515891515145b15610f425760006064896006016005015460028b60030154610ec89190614945565b87610ed39190614c16565b886002015487610ee39190614a68565b610eed9190614945565b610ef79190614a68565b610f019190614945565b90508083610f0f91906148e2565b9250610f40308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b7565b505b8080600101915050610e4e565b505b60005b60065481101561101a5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa06110ed565b610fa98361124b565b8b600d0154610fb89190614a68565b610fc29190614945565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100a573d6000803e3d6000fd5b5050508080600101915050610f54565b5086600f0160029054906101000a900460ff16156110e0578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109b959493929190614b7a565b6020604051808303816000875af11580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190614be9565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90614c96565b60405180910390fd5b6000600d6000858152602001908152602001600020905061115781338585612570565b50505050565b60006009905090565b6009818154811061117657600080fd5b90600052602060002001600091509050805461119190614816565b80601f01602080910402602001604051908101604052809291908181526020018280546111bd90614816565b801561120a5780601f106111df5761010080835404028352916020019161120a565b820191906000526020600020905b8154815290600101906020018083116111ed57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a03385856122a5565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112dd93929190614cb6565b600060405180830381600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b50505050600190509392505050565b60606004805461132990614816565b80601f016020809104026020016040519081016040528092919081815260200182805461135590614816565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113ce843385612666565b6113da81858585612570565b5050505050565b6000803411611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614d5f565b60405180910390fd5b6001891015611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090614dcb565b60405180910390fd5b651cae8c13e0008911156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614e37565b60405180910390fd5b876001600281106114c6576114c5614a39565b5b6020020135600f6000600281106114e0576114df614a39565b5b01546114ec9190614a68565b88600060028110611500576114ff614a39565b5b6020020135600f60016002811061151a57611519614a39565b5b01546115269190614a68565b1015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614ea3565b60405180910390fd5b8760016002811061157b5761157a614a39565b5b60200201358860006002811061159457611593614a39565b5b602002013511156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614f0f565b60405180910390fd5b866001600281106115ee576115ed614a39565b5b60200201358760006002811061160757611606614a39565b5b6020020135111561164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490614f7b565b60405180910390fd5b6064861115611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890614fe7565b60405180910390fd5b600060088c8c6040516116a5929190615037565b9081526020016040518091039020905060008160020180549050036116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f69061509c565b60405180910390fd5b600e6000815480929190611712906150bc565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117859291906152bb565b503481600d018190555089816006016001019060026117a5929190613a7f565b5088816006016003019060026117bc929190613a7f565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180091906148e2565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118409291906153dc565b5061184b30346126fa565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118839190613cbb565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e490614816565b80601f016020809104026020016040519081016040528092919081815260200182805461191090614816565b801561195d5780601f106119325761010080835404028352916020019161195d565b820191906000526020600020905b81548152906001019060200180831161194057829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ea576020028201915b8154815260200190600101908083116119d6575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a2f576020028201915b815481526020019060010190808311611a1b575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab290614816565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade90614816565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614c96565b60405180910390fd5b6060600060088484604051611b88929190615037565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c4e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bbc565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f9061551e565b60405180910390fd5b600a6000815480929190611d3b906150bc565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d7d9291906152bb565b50600060088585604051611d92929190615037565b908152602001604051809103902090506000816002018054905014611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de3906155b0565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e429291906152bb565b50600080600090505b88889050811015611ee157888882818110611e6957611e68614a39565b5b9050604002016000013582611e7e91906148e2565b915082600201898983818110611e9757611e96614a39565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed2919061575d565b50508080600101915050611e4b565b50620f42408114611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e906157dd565b60405180910390fd5b60005b84849050811015611fa25782600301858583818110611f4c57611f4b614a39565b5b9050602002810190611f5e919061580c565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f939190615973565b50508080600101915050611f2a565b5060008060005b84600301805490508110156120c6576000856003018281548110611fd057611fcf614a39565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e906159f3565b60405180910390fd5b620f424081131561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615a85565b60405180910390fd5b60008113156120a95780846120a29190615aa5565b93506120b8565b80836120b59190615aa5565b92505b508080600101915050611fa9565b50620f424082131561210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490615b5b565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790615bed565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972788886040516121a1929190615c3a565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121ee90614816565b80601f016020809104026020016040519081016040528092919081815260200182805461221a90614816565b80156122675780601f1061223c57610100808354040283529160200191612267565b820191906000526020600020905b81548152906001019060200180831161224a57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122b2838383600161277c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123095780600260008282546122fd91906148e2565b925050819055506123dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612395578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238c93929190614cb6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124255780600260008282540392505081905550612472565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124cf9190613cbb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361254e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125459190613e1b565b60405180910390fd5b61255a826000836122b7565b5050565b61256b8282600080612953565b505050565b83600e01544211156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615caa565b60405180910390fd5b60008460050160008154809291906125ce906150bc565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006126728484611c5b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126f457818110156126e4578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016126db93929190614cb6565b60405180910390fd5b6126f38484848403600061277c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276c5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016127639190613e1b565b60405180910390fd5b612778600083836122b7565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127ee5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127e59190613e1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128605760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128579190613e1b565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561294d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516129449190613cbb565b60405180910390a35b50505050565b6000600c548210612966578390506134f3565b60006008866040516129789190615cfb565b9081526020016040518091039020905060008160020180549050036129a057849150506134f3565b60005b8160030180549050811015612ad45760008260030182815481106129ca576129c9614a39565b5b9060005260206000209060020201600001541215612ac757612ab9878360030183815481106129fc576129fb614a39565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a2f90614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5b90614816565b8015612aa85780601f10612a7d57610100808354040283529160200191612aa8565b820191906000526020600020905b815481529060010190602001808311612a8b57829003601f168201915b5050505050815250508888886134fb565b86612ac49190615d12565b95505b80806001019150506129a3565b5060005b8160030180549050811015612c09576000826003018281548110612aff57612afe614a39565b5b9060005260206000209060020201600001541315612bfc57612bee87836003018381548110612b3157612b30614a39565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612b6490614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612b9090614816565b8015612bdd5780601f10612bb257610100808354040283529160200191612bdd565b820191906000526020600020905b815481529060010190602001808311612bc057829003601f168201915b5050505050815250508888886134fb565b86612bf99190615d12565b95505b8080600101915050612ad8565b506000851315612ef557612ed4816040518060a0016040529081600082018054612c3290614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5e90614816565b8015612cab5780601f10612c8057610100808354040283529160200191612cab565b820191906000526020600020905b815481529060010190602001808311612c8e57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612dc15783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612d2f565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612ebc578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612e2b90614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5790614816565b8015612ea45780601f10612e7957610100808354040283529160200191612ea4565b820191906000526020600020905b815481529060010190602001808311612e8757829003601f168201915b50505050508152505081526020019060010190612dee565b505050508152602001600482015481525050866136c6565b5084816004016000828254612ee991906148e2565b925050819055506134f1565b6000858260040154612f079190615aa5565b126131f8576131cd816040518060a0016040529081600082018054612f2b90614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5790614816565b8015612fa45780601f10612f7957610100808354040283529160200191612fa4565b820191906000526020600020905b815481529060010190602001808311612f8757829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156130ba5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613028565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131b557838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461312490614816565b80601f016020809104026020016040519081016040528092919081815260200182805461315090614816565b801561319d5780601f106131725761010080835404028352916020019161319d565b820191906000526020600020905b81548152906001019060200180831161318057829003601f168201915b505050505081525050815260200190600101906130e7565b505050508152602001600482015481525050866136c6565b9150846131d990615d55565b8160040160008282546131ec9190614c16565b925050819055506134f0565b8481600401546132089190615aa5565b91506134d8816040518060a001604052908160008201805461322990614816565b80601f016020809104026020016040519081016040528092919081815260200182805461325590614816565b80156132a25780601f10613277576101008083540402835291602001916132a2565b820191906000526020600020905b81548152906001019060200180831161328557829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156133b85783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613326565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156134b357838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461342290614816565b80601f016020809104026020016040519081016040528092919081815260200182805461344e90614816565b801561349b5780601f106134705761010080835404028352916020019161349b565b820191906000526020600020905b81548152906001019060200180831161347e57829003601f168201915b505050505081525050815260200190600101906133e5565b50505050815260200160048201548152505082600401546134d390615d55565b6136c6565b826134e39190615aa5565b9150600081600401819055505b5b505b949350505050565b6000620f42408560000151856135119190615d9d565b61351b9190615e15565b905060008560200151510361357d57600081121561356e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356590615ef1565b60405180910390fd5b61357830826124dc565b6136bd565b6000600b8760405161358f9190615cfb565b908152602001604051809103902086602001516040516135af9190615cfb565b9081526020016040518091039020549050831561361c5760008212156135f757806135d990615d55565b82136135ee57806135e990615d55565b6135f0565b815b915061361b565b8061360190615d55565b8212613616578061361190615d55565b613618565b815b91505b5b600061365587602001518487806136435750600087148015613642575060008a60000151125b5b60018861365091906148e2565b612953565b905080836136639190615d12565b925082600b896040516136769190615cfb565b908152602001604051809103902088602001516040516136969190615cfb565b908152602001604051809103902060008282546136b39190615aa5565b9250508190555050505b95945050505050565b60008060005b846040015151811015613820576000856040015182815181106136f2576136f1614a39565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661381257806005600060066000815480929190613769906150bc565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136cc565b5060005b846040015151811015613a775760008560400151828151811061384a57613849614a39565b5b60200260200101519050600060018760400151516138689190614c16565b8310156138a257620f42408260000151876138839190615d9d565b61388d9190615e15565b9050808461389b9190615aa5565b93506138b1565b83866138ae9190615d12565b90505b60008113156139ec576138c9308360200151836122b7565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139e7578160200151600560006006600081548092919061393a906150bc565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a68565b806139f690615d55565b613a03836020015161124b565b1015613a4e57613a16826020015161124b565b81613a219190615aa5565b85613a2c9190615aa5565b9450613a49826020015130613a44856020015161124b565b6122b7565b613a67565b613a6682602001513083613a6190615d55565b6122b7565b5b5b50508080600101915050613824565b505092915050565b8260028101928215613aae579160200282015b82811115613aad578235825591602001919060010190613a92565b5b509050613abb9190613abf565b5090565b5b80821115613ad8576000816000905550600101613ac0565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b16578082015181840152602081019050613afb565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3e82613adc565b613b488185613ae7565b9350613b58818560208601613af8565b613b6181613b22565b840191505092915050565b60006020820190508181036000830152613b868184613b33565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bcd82613ba2565b9050919050565b613bdd81613bc2565b8114613be857600080fd5b50565b600081359050613bfa81613bd4565b92915050565b6000819050919050565b613c1381613c00565b8114613c1e57600080fd5b50565b600081359050613c3081613c0a565b92915050565b60008060408385031215613c4d57613c4c613b98565b5b6000613c5b85828601613beb565b9250506020613c6c85828601613c21565b9150509250929050565b60008115159050919050565b613c8b81613c76565b82525050565b6000602082019050613ca66000830184613c82565b92915050565b613cb581613c00565b82525050565b6000602082019050613cd06000830184613cac565b92915050565b600060208284031215613cec57613ceb613b98565b5b6000613cfa84828501613c21565b91505092915050565b600080600060608486031215613d1c57613d1b613b98565b5b6000613d2a86828701613beb565b9350506020613d3b86828701613beb565b9250506040613d4c86828701613c21565b9150509250925092565b613d5f81613c76565b8114613d6a57600080fd5b50565b600081359050613d7c81613d56565b92915050565b600080600060608486031215613d9b57613d9a613b98565b5b6000613da986828701613c21565b9350506020613dba86828701613c21565b9250506040613dcb86828701613d6d565b9150509250925092565b600060ff82169050919050565b613deb81613dd5565b82525050565b6000602082019050613e066000830184613de2565b92915050565b613e1581613bc2565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b600060208284031215613e4c57613e4b613b98565b5b6000613e5a84828501613beb565b91505092915050565b600080600060608486031215613e7c57613e7b613b98565b5b6000613e8a86828701613beb565b9350506020613e9b86828701613c21565b9250506040613eac86828701613c21565b9150509250925092565b60008060008060808587031215613ed057613ecf613b98565b5b6000613ede87828801613c21565b9450506020613eef87828801613beb565b9350506040613f0087828801613c21565b9250506060613f1187828801613d6d565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f4257613f41613f1d565b5b8235905067ffffffffffffffff811115613f5f57613f5e613f22565b5b602083019150836001820283011115613f7b57613f7a613f27565b5b9250929050565b600081905082602060020282011115613f9e57613f9d613f27565b5b92915050565b60008083601f840112613fba57613fb9613f1d565b5b8235905067ffffffffffffffff811115613fd757613fd6613f22565b5b602083019150836001820283011115613ff357613ff2613f27565b5b9250929050565b6000806000806000806000806000806101408b8d03121561401e5761401d613b98565b5b60008b013567ffffffffffffffff81111561403c5761403b613b9d565b5b6140488d828e01613f2c565b9a509a5050602061405b8d828e01613c21565b985050604061406c8d828e01613f82565b975050608061407d8d828e01613f82565b96505060c061408e8d828e01613c21565b95505060e061409f8d828e01613d6d565b9450506101006140b18d828e01613d6d565b9350506101208b013567ffffffffffffffff8111156140d3576140d2613b9d565b5b6140df8d828e01613fa4565b92509250509295989b9194979a5092959850565b6140fc81613c00565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412e83836140f3565b60208301905092915050565b6000602082019050919050565b61415081614102565b61415a818461410d565b925061416582614118565b8060005b8381101561419657815161417d8782614122565b96506141888361413a565b925050600181019050614169565b505050505050565b6141a781613c76565b82525050565b60e0820160008201516141c360008501826140f3565b5060208201516141d66020850182614147565b5060408201516141e96060850182614147565b5060608201516141fc60a08501826140f3565b50608082015161420f60c085018261419e565b50505050565b600081519050919050565b600082825260208201905092915050565b600061423c82614215565b6142468185614220565b9350614256818560208601613af8565b61425f81613b22565b840191505092915050565b600061024082019050614280600083018f613cac565b8181036020830152614292818e613b33565b90506142a1604083018d613e0c565b6142ae606083018c613cac565b6142bb608083018b613cac565b6142c860a083018a6141ad565b6142d6610180830189613cac565b6142e46101a0830188613cac565b6142f26101c0830187613c82565b6143006101e0830186613c82565b61430e610200830185613c82565b8181036102208301526143218184614231565b90509d9c50505050505050505050505050565b6000806020838503121561434b5761434a613b98565b5b600083013567ffffffffffffffff81111561436957614368613b9d565b5b61437585828601613f2c565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143b681613bc2565b82525050565b6040820160008201516143d260008501826140f3565b5060208201516143e560208501826143ad565b50505050565b60006143f783836143bc565b60408301905092915050565b6000602082019050919050565b600061441b82614381565b614425818561438c565b93506144308361439d565b8060005b8381101561446157815161444888826143eb565b975061445383614403565b925050600181019050614434565b5085935050505092915050565b600060208201905081810360008301526144888184614410565b905092915050565b600080604083850312156144a7576144a6613b98565b5b60006144b585828601613beb565b92505060206144c685828601613beb565b9150509250929050565b60008083601f8401126144e6576144e5613f1d565b5b8235905067ffffffffffffffff81111561450357614502613f22565b5b60208301915083604082028301111561451f5761451e613f27565b5b9250929050565b60008083601f84011261453c5761453b613f1d565b5b8235905067ffffffffffffffff81111561455957614558613f22565b5b60208301915083602082028301111561457557614574613f27565b5b9250929050565b6000806000806000806060878903121561459957614598613b98565b5b600087013567ffffffffffffffff8111156145b7576145b6613b9d565b5b6145c389828a016144d0565b9650965050602087013567ffffffffffffffff8111156145e6576145e5613b9d565b5b6145f289828a01613f2c565b9450945050604087013567ffffffffffffffff81111561461557614614613b9d565b5b61462189828a01614526565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61466d82613b22565b810181811067ffffffffffffffff8211171561468c5761468b614635565b5b80604052505050565b600061469f613b8e565b90506146ab8282614664565b919050565b600067ffffffffffffffff8211156146cb576146ca614635565b5b6146d482613b22565b9050602081019050919050565b82818337600083830152505050565b60006147036146fe846146b0565b614695565b90508281526020810184848401111561471f5761471e614630565b5b61472a8482856146e1565b509392505050565b600082601f83011261474757614746613f1d565b5b81356147578482602086016146f0565b91505092915050565b60006020828403121561477657614775613b98565b5b600082013567ffffffffffffffff81111561479457614793613b9d565b5b6147a084828501614732565b91505092915050565b600060608201905081810360008301526147c38186613b33565b90506147d26020830185613e0c565b6147df6040830184613cac565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482e57607f821691505b602082108103614841576148406147e7565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061487d601883613ae7565b915061488882614847565b602082019050919050565b600060208201905081810360008301526148ac81614870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148ed82613c00565b91506148f883613c00565b92508282019050808211156149105761490f6148b3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495082613c00565b915061495b83613c00565b92508261496b5761496a614916565b5b828204905092915050565b600061498182613c00565b915061498c83613c00565b92508261499c5761499b614916565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a03602183613ae7565b9150614a0e826149a7565b604082019050919050565b60006020820190508181036000830152614a32816149f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a7382613c00565b9150614a7e83613c00565b9250828202614a8c81613c00565b91508282048414831517614aa357614aa26148b3565b5b5092915050565b6000606082019050614abf6000830186613cac565b614acc6020830185613c82565b614ad96040830184613c82565b949350505050565b60008190508160005260206000209050919050565b60008154614b0381614816565b614b0d8186614220565b94506001821660008114614b285760018114614b3e57614b71565b60ff198316865281151560200286019350614b71565b614b4785614ae1565b60005b83811015614b6957815481890152600182019150602081019050614b4a565b808801955050505b50505092915050565b600060a082019050614b8f6000830188613c82565b614b9c6020830187613c82565b614ba96040830186613cac565b614bb66060830185613cac565b8181036080830152614bc88184614af6565b90509695505050505050565b600081519050614be381613c0a565b92915050565b600060208284031215614bff57614bfe613b98565b5b6000614c0d84828501614bd4565b91505092915050565b6000614c2182613c00565b9150614c2c83613c00565b9250828203905081811115614c4457614c436148b3565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c80601b83613ae7565b9150614c8b82614c4a565b602082019050919050565b60006020820190508181036000830152614caf81614c73565b9050919050565b6000606082019050614ccb6000830186613e0c565b614cd86020830185613cac565b614ce56040830184613cac565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d49602b83613ae7565b9150614d5482614ced565b604082019050919050565b60006020820190508181036000830152614d7881614d3c565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614db5601583613ae7565b9150614dc082614d7f565b602082019050919050565b60006020820190508181036000830152614de481614da8565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e21601483613ae7565b9150614e2c82614deb565b602082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e8d601783613ae7565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614ef9601a83613ae7565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f65601d83613ae7565b9150614f7082614f2f565b602082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fd1601e83613ae7565b9150614fdc82614f9b565b602082019050919050565b6000602082019050818103600083015261500081614fc4565b9050919050565b600081905092915050565b600061501e8385615007565b935061502b8385846146e1565b82840190509392505050565b6000615044828486615012565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000615086601583613ae7565b915061509182615050565b602082019050919050565b600060208201905081810360008301526150b581615079565b9050919050565b60006150c782613c00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150f9576150f86148b3565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615134565b61517b8683615134565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151b86151b36151ae84613c00565b615193565b613c00565b9050919050565b6000819050919050565b6151d28361519d565b6151e66151de826151bf565b848454615141565b825550505050565b600090565b6151fb6151ee565b6152068184846151c9565b505050565b5b8181101561522a5761521f6000826151f3565b60018101905061520c565b5050565b601f82111561526f576152408161510f565b61524984615124565b81016020851015615258578190505b61526c61526485615124565b83018261520b565b50505b505050565b600082821c905092915050565b600061529260001984600802615274565b1980831691505092915050565b60006152ab8383615281565b9150826002028217905092915050565b6152c58383615104565b67ffffffffffffffff8111156152de576152dd614635565b5b6152e88254614816565b6152f382828561522e565b6000601f8311600181146153225760008415615310578287013590505b61531a858261529f565b865550615382565b601f1984166153308661510f565b60005b8281101561535857848901358255600182019150602085019450602081019050615333565b868310156153755784890135615371601f891682615281565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153d7576153a881614ae1565b6153b184615124565b810160208510156153c0578190505b6153d46153cc85615124565b83018261520b565b50505b505050565b6153e6838361538b565b67ffffffffffffffff8111156153ff576153fe614635565b5b6154098254614816565b615414828285615396565b6000601f8311600181146154435760008415615431578287013590505b61543b858261529f565b8655506154a3565b601f19841661545186614ae1565b60005b8281101561547957848901358255600182019150602085019450602081019050615454565b868310156154965784890135615492601f891682615281565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b6000615508602583613ae7565b9150615513826154ac565b604082019050919050565b60006020820190508181036000830152615537816154fb565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061559a602983613ae7565b91506155a58261553e565b604082019050919050565b600060208201905081810360008301526155c98161558d565b9050919050565b600081356155dd81613c0a565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61561f846155e6565b9350801983169250808416831791505092915050565b61563e8261519d565b61565161564a826151bf565b83546155f3565b8255505050565b6000813561566581613bd4565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff61568e846155e6565b9350801983169250808416831791505092915050565b60006156bf6156ba6156b584613ba2565b615193565b613ba2565b9050919050565b60006156d1826156a4565b9050919050565b60006156e3826156c6565b9050919050565b6000819050919050565b6156fd826156d8565b615710615709826156ea565b835461566e565b8255505050565b600081016000830180615729816155d0565b90506157358184615635565b50505060018101602083018061574a81615658565b905061575681846156f4565b5050505050565b6157678282615717565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006157c7602283613ae7565b91506157d28261576b565b604082019050919050565b600060208201905081810360008301526157f6816157ba565b9050919050565b600080fd5b600080fd5b600080fd5b600082356001604003833603038112615828576158276157fd565b5b80830191505092915050565b6000819050919050565b61584781615834565b811461585257600080fd5b50565b600081356158628161583e565b80915050919050565b600061588661588161587c84615834565b615193565b615834565b9050919050565b6000819050919050565b6158a08261586b565b6158b36158ac8261588d565b83546155f3565b8255505050565b600080833560016020038436030381126158d7576158d66157fd565b5b80840192508235915067ffffffffffffffff8211156158f9576158f8615802565b5b60208301925060018202360383131561591557615914615807565b5b509250929050565b6159288383836152bb565b505050565b60008101600083018061593f81615855565b905061594b8184615897565b505050600181016020830161596081856158ba565b61596b81838661591d565b505050505050565b61597d828261592d565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b60006159dd602883613ae7565b91506159e882615981565b604082019050919050565b60006020820190508181036000830152615a0c816159d0565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615a6f602783613ae7565b9150615a7a82615a13565b604082019050919050565b60006020820190508181036000830152615a9e81615a62565b9050919050565b6000615ab082615834565b9150615abb83615834565b925082820190508281121560008312168382126000841215161715615ae357615ae26148b3565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615b45602c83613ae7565b9150615b5082615ae9565b604082019050919050565b60006020820190508181036000830152615b7481615b38565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615bd7602d83613ae7565b9150615be282615b7b565b604082019050919050565b60006020820190508181036000830152615c0681615bca565b9050919050565b6000615c198385613ae7565b9350615c268385846146e1565b615c2f83613b22565b840190509392505050565b60006020820190508181036000830152615c55818486615c0d565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615c94601883613ae7565b9150615c9f82615c5e565b602082019050919050565b60006020820190508181036000830152615cc381615c87565b9050919050565b6000615cd582613adc565b615cdf8185615007565b9350615cef818560208601613af8565b80840191505092915050565b6000615d078284615cca565b915081905092915050565b6000615d1d82615834565b9150615d2883615834565b9250828203905081811260008412168282136000851215161715615d4f57615d4e6148b3565b5b92915050565b6000615d6082615834565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d9257615d916148b3565b5b816000039050919050565b6000615da882615834565b9150615db383615834565b9250828202615dc181615834565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615df957615df86148b3565b5b8282058414831517615e0e57615e0d6148b3565b5b5092915050565b6000615e2082615834565b9150615e2b83615834565b925082615e3b57615e3a614916565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e7457615e736148b3565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615edb602683613ae7565b9150615ee682615e7f565b604082019050919050565b60006020820190508181036000830152615f0a81615ece565b905091905056fea26469706673582212209f1eb3ff12aa3e0b4012bf2fd5064caa9b3995b97c752a0a223c5e60febeb27a64736f6c63430008180033",
"deployedBytecode": "0x60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b6c565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c36565b6106e0565b6040516101af9190613c91565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cbb565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cbb565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613cd6565b61070f565b6040516102429190613c91565b60405180910390f35b34801561025757600080fd5b506102606110ed565b60405161026d9190613cbb565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613d03565b6110f7565b6040516102aa9190613c91565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d82565b611134565b005b3480156102e857600080fd5b506102f161115d565b6040516102fe9190613df1565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613cd6565b611166565b60405161033b9190613b6c565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613cd6565b611212565b6040516103789190613e1b565b60405180910390f35b34801561038d57600080fd5b50610396611245565b6040516103a39190613cbb565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e36565b61124b565b6040516103e09190613cbb565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e63565b611293565b60405161041d9190613c91565b60405180910390f35b34801561043257600080fd5b5061043b61131a565b6040516104489190613b6c565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613eb6565b6113ac565b005b610494600480360381019061048f9190613ffa565b6113e1565b6040516104a19190613cbb565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e36565b61189b565b6040516104de9190613c91565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613cd6565b6118bb565b6040516105269c9b9a9998979695949392919061426a565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c36565b611b35565b6040516105639190613c91565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190614334565b611b72565b6040516105a0919061446e565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614490565b611c5b565b6040516105dd9190613cbb565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061457c565b611ce2565b005b34801561061b57600080fd5b5061063660048036038101906106319190614760565b6121b5565b604051610645939291906147a9565b60405180910390f35b60606003805461065d90614816565b80601f016020809104026020016040519081016040528092919081815260200182805461068990614816565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb61229d565b90506106f88185856122a5565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614893565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148e2565b93506107ee565b8160020154836107eb91906148e2565b92505b808060010191505061078a565b506002846003015461080d9190614945565b8361081891906148e2565b92506002846003015461082b9190614945565b8261083691906148e2565b915060006002856003015461084b9190614976565b146108605760018361085d91906148e2565b92505b83600e015442118061088357506108756110ed565b828461088191906148e2565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a19565b60405180910390fd5b836006016001016000600281106108dc576108db614a39565b5b01546108e66110ed565b6108f09190614a68565b82846108fc91906148e2565b8560060160010160016002811061091657610915614a39565b5b01546109229190614a68565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614aaa565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b7a565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614be9565b505b60009450505050506110e8565b83600601600301600060028110610a6c57610a6b614a39565b5b01548284610a7a91906148e2565b610a849190614a68565b84600601600301600160028110610a9e57610a9d614a39565b5b015484610aab9190614a68565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614aaa565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a68565b610b9f9190614945565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122b7565b8084610bf691906148e2565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124dc565b5b505b8080600101915050610b3b565b508715610e395760028760030154610c539190614945565b82610c5e91906148e2565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a68565b610ce79190614945565b610cf19190614a68565b610cfb9190614945565b90508083610d0991906148e2565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b7565b505b8080600101915050610c63565b5060008183610d589190614c16565b9050600060028960030154610d6d9190614976565b14610d8257600181610d7f91906148e2565b90505b610e33886001018054610d9490614816565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090614816565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e249190614945565b610e2e91906148e2565b61255e565b50610f51565b866003015482610e4991906148e2565b915060005b8760050154811015610f4f5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610ea657508460010160009054906101000a900460ff161515891515145b15610f425760006064896006016005015460028b60030154610ec89190614945565b87610ed39190614c16565b886002015487610ee39190614a68565b610eed9190614945565b610ef79190614a68565b610f019190614945565b90508083610f0f91906148e2565b9250610f40308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122b7565b505b8080600101915050610e4e565b505b60005b60065481101561101a5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa06110ed565b610fa98361124b565b8b600d0154610fb89190614a68565b610fc29190614945565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100a573d6000803e3d6000fd5b5050508080600101915050610f54565b5086600f0160029054906101000a900460ff16156110e0578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109b959493929190614b7a565b6020604051808303816000875af11580156110ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110de9190614be9565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112b90614c96565b60405180910390fd5b6000600d6000858152602001908152602001600020905061115781338585612570565b50505050565b60006009905090565b6009818154811061117657600080fd5b90600052602060002001600091509050805461119190614816565b80601f01602080910402602001604051908101604052809291908181526020018280546111bd90614816565b801561120a5780601f106111df5761010080835404028352916020019161120a565b820191906000526020600020905b8154815290600101906020018083116111ed57829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a03385856122a5565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112dd93929190614cb6565b600060405180830381600087803b1580156112f757600080fd5b505af115801561130b573d6000803e3d6000fd5b50505050600190509392505050565b60606004805461132990614816565b80601f016020809104026020016040519081016040528092919081815260200182805461135590614816565b80156113a25780601f10611377576101008083540402835291602001916113a2565b820191906000526020600020905b81548152906001019060200180831161138557829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113ce843385612666565b6113da81858585612570565b5050505050565b6000803411611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90614d5f565b60405180910390fd5b6001891015611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090614dcb565b60405180910390fd5b651cae8c13e0008911156114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614e37565b60405180910390fd5b876001600281106114c6576114c5614a39565b5b6020020135600f6000600281106114e0576114df614a39565b5b01546114ec9190614a68565b88600060028110611500576114ff614a39565b5b6020020135600f60016002811061151a57611519614a39565b5b01546115269190614a68565b1015611567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155e90614ea3565b60405180910390fd5b8760016002811061157b5761157a614a39565b5b60200201358860006002811061159457611593614a39565b5b602002013511156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190614f0f565b60405180910390fd5b866001600281106115ee576115ed614a39565b5b60200201358760006002811061160757611606614a39565b5b6020020135111561164d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164490614f7b565b60405180910390fd5b6064861115611691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168890614fe7565b60405180910390fd5b600060088c8c6040516116a5929190615037565b9081526020016040518091039020905060008160020180549050036116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f69061509c565b60405180910390fd5b600e6000815480929190611712906150bc565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117859291906152bb565b503481600d018190555089816006016001019060026117a5929190613a7f565b5088816006016003019060026117bc929190613a7f565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180091906148e2565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118409291906153dc565b5061184b30346126fa565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118839190613cbb565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e490614816565b80601f016020809104026020016040519081016040528092919081815260200182805461191090614816565b801561195d5780601f106119325761010080835404028352916020019161195d565b820191906000526020600020905b81548152906001019060200180831161194057829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ea576020028201915b8154815260200190600101908083116119d6575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a2f576020028201915b815481526020019060010190808311611a1b575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab290614816565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade90614816565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614c96565b60405180910390fd5b6060600060088484604051611b88929190615037565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c4e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bbc565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f9061551e565b60405180910390fd5b600a6000815480929190611d3b906150bc565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d7d9291906152bb565b50600060088585604051611d92929190615037565b908152602001604051809103902090506000816002018054905014611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de3906155b0565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e429291906152bb565b50600080600090505b88889050811015611ee157888882818110611e6957611e68614a39565b5b9050604002016000013582611e7e91906148e2565b915082600201898983818110611e9757611e96614a39565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed2919061575d565b50508080600101915050611e4b565b50620f42408114611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e906157dd565b60405180910390fd5b60005b84849050811015611fa25782600301858583818110611f4c57611f4b614a39565b5b9050602002810190611f5e919061580c565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f939190615973565b50508080600101915050611f2a565b5060008060005b84600301805490508110156120c6576000856003018281548110611fd057611fcf614a39565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e906159f3565b60405180910390fd5b620f424081131561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615a85565b60405180910390fd5b60008113156120a95780846120a29190615aa5565b93506120b8565b80836120b59190615aa5565b92505b508080600101915050611fa9565b50620f424082131561210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490615b5b565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790615bed565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972788886040516121a1929190615c3a565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121ee90614816565b80601f016020809104026020016040519081016040528092919081815260200182805461221a90614816565b80156122675780601f1061223c57610100808354040283529160200191612267565b820191906000526020600020905b81548152906001019060200180831161224a57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122b2838383600161277c565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123095780600260008282546122fd91906148e2565b925050819055506123dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612395578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238c93929190614cb6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124255780600260008282540392505081905550612472565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124cf9190613cbb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361254e5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125459190613e1b565b60405180910390fd5b61255a826000836122b7565b5050565b61256b8282600080612953565b505050565b83600e01544211156125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615caa565b60405180910390fd5b60008460050160008154809291906125ce906150bc565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006126728484611c5b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126f457818110156126e4578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016126db93929190614cb6565b60405180910390fd5b6126f38484848403600061277c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361276c5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016127639190613e1b565b60405180910390fd5b612778600083836122b7565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036127ee5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127e59190613e1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128605760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016128579190613e1b565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561294d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516129449190613cbb565b60405180910390a35b50505050565b6000600c548210612966578390506134f3565b60006008866040516129789190615cfb565b9081526020016040518091039020905060008160020180549050036129a057849150506134f3565b60005b8160030180549050811015612ad45760008260030182815481106129ca576129c9614a39565b5b9060005260206000209060020201600001541215612ac757612ab9878360030183815481106129fc576129fb614a39565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a2f90614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5b90614816565b8015612aa85780601f10612a7d57610100808354040283529160200191612aa8565b820191906000526020600020905b815481529060010190602001808311612a8b57829003601f168201915b5050505050815250508888886134fb565b86612ac49190615d12565b95505b80806001019150506129a3565b5060005b8160030180549050811015612c09576000826003018281548110612aff57612afe614a39565b5b9060005260206000209060020201600001541315612bfc57612bee87836003018381548110612b3157612b30614a39565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612b6490614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612b9090614816565b8015612bdd5780601f10612bb257610100808354040283529160200191612bdd565b820191906000526020600020905b815481529060010190602001808311612bc057829003601f168201915b5050505050815250508888886134fb565b86612bf99190615d12565b95505b8080600101915050612ad8565b506000851315612ef557612ed4816040518060a0016040529081600082018054612c3290614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5e90614816565b8015612cab5780601f10612c8057610100808354040283529160200191612cab565b820191906000526020600020905b815481529060010190602001808311612c8e57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612dc15783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612d2f565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612ebc578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612e2b90614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5790614816565b8015612ea45780601f10612e7957610100808354040283529160200191612ea4565b820191906000526020600020905b815481529060010190602001808311612e8757829003601f168201915b50505050508152505081526020019060010190612dee565b505050508152602001600482015481525050866136c6565b5084816004016000828254612ee991906148e2565b925050819055506134f1565b6000858260040154612f079190615aa5565b126131f8576131cd816040518060a0016040529081600082018054612f2b90614816565b80601f0160208091040260200160405190810160405280929190818152602001828054612f5790614816565b8015612fa45780601f10612f7957610100808354040283529160200191612fa4565b820191906000526020600020905b815481529060010190602001808311612f8757829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156130ba5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613028565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131b557838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461312490614816565b80601f016020809104026020016040519081016040528092919081815260200182805461315090614816565b801561319d5780601f106131725761010080835404028352916020019161319d565b820191906000526020600020905b81548152906001019060200180831161318057829003601f168201915b505050505081525050815260200190600101906130e7565b505050508152602001600482015481525050866136c6565b9150846131d990615d55565b8160040160008282546131ec9190614c16565b925050819055506134f0565b8481600401546132089190615aa5565b91506134d8816040518060a001604052908160008201805461322990614816565b80601f016020809104026020016040519081016040528092919081815260200182805461325590614816565b80156132a25780601f10613277576101008083540402835291602001916132a2565b820191906000526020600020905b81548152906001019060200180831161328557829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156133b85783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190613326565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156134b357838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461342290614816565b80601f016020809104026020016040519081016040528092919081815260200182805461344e90614816565b801561349b5780601f106134705761010080835404028352916020019161349b565b820191906000526020600020905b81548152906001019060200180831161347e57829003601f168201915b505050505081525050815260200190600101906133e5565b50505050815260200160048201548152505082600401546134d390615d55565b6136c6565b826134e39190615aa5565b9150600081600401819055505b5b505b949350505050565b6000620f42408560000151856135119190615d9d565b61351b9190615e15565b905060008560200151510361357d57600081121561356e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356590615ef1565b60405180910390fd5b61357830826124dc565b6136bd565b6000600b8760405161358f9190615cfb565b908152602001604051809103902086602001516040516135af9190615cfb565b9081526020016040518091039020549050831561361c5760008212156135f757806135d990615d55565b82136135ee57806135e990615d55565b6135f0565b815b915061361b565b8061360190615d55565b8212613616578061361190615d55565b613618565b815b91505b5b600061365587602001518487806136435750600087148015613642575060008a60000151125b5b60018861365091906148e2565b612953565b905080836136639190615d12565b925082600b896040516136769190615cfb565b908152602001604051809103902088602001516040516136969190615cfb565b908152602001604051809103902060008282546136b39190615aa5565b9250508190555050505b95945050505050565b60008060005b846040015151811015613820576000856040015182815181106136f2576136f1614a39565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661381257806005600060066000815480929190613769906150bc565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136cc565b5060005b846040015151811015613a775760008560400151828151811061384a57613849614a39565b5b60200260200101519050600060018760400151516138689190614c16565b8310156138a257620f42408260000151876138839190615d9d565b61388d9190615e15565b9050808461389b9190615aa5565b93506138b1565b83866138ae9190615d12565b90505b60008113156139ec576138c9308360200151836122b7565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139e7578160200151600560006006600081548092919061393a906150bc565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a68565b806139f690615d55565b613a03836020015161124b565b1015613a4e57613a16826020015161124b565b81613a219190615aa5565b85613a2c9190615aa5565b9450613a49826020015130613a44856020015161124b565b6122b7565b613a67565b613a6682602001513083613a6190615d55565b6122b7565b5b5b50508080600101915050613824565b505092915050565b8260028101928215613aae579160200282015b82811115613aad578235825591602001919060010190613a92565b5b509050613abb9190613abf565b5090565b5b80821115613ad8576000816000905550600101613ac0565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b16578082015181840152602081019050613afb565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3e82613adc565b613b488185613ae7565b9350613b58818560208601613af8565b613b6181613b22565b840191505092915050565b60006020820190508181036000830152613b868184613b33565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bcd82613ba2565b9050919050565b613bdd81613bc2565b8114613be857600080fd5b50565b600081359050613bfa81613bd4565b92915050565b6000819050919050565b613c1381613c00565b8114613c1e57600080fd5b50565b600081359050613c3081613c0a565b92915050565b60008060408385031215613c4d57613c4c613b98565b5b6000613c5b85828601613beb565b9250506020613c6c85828601613c21565b9150509250929050565b60008115159050919050565b613c8b81613c76565b82525050565b6000602082019050613ca66000830184613c82565b92915050565b613cb581613c00565b82525050565b6000602082019050613cd06000830184613cac565b92915050565b600060208284031215613cec57613ceb613b98565b5b6000613cfa84828501613c21565b91505092915050565b600080600060608486031215613d1c57613d1b613b98565b5b6000613d2a86828701613beb565b9350506020613d3b86828701613beb565b9250506040613d4c86828701613c21565b9150509250925092565b613d5f81613c76565b8114613d6a57600080fd5b50565b600081359050613d7c81613d56565b92915050565b600080600060608486031215613d9b57613d9a613b98565b5b6000613da986828701613c21565b9350506020613dba86828701613c21565b9250506040613dcb86828701613d6d565b9150509250925092565b600060ff82169050919050565b613deb81613dd5565b82525050565b6000602082019050613e066000830184613de2565b92915050565b613e1581613bc2565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b600060208284031215613e4c57613e4b613b98565b5b6000613e5a84828501613beb565b91505092915050565b600080600060608486031215613e7c57613e7b613b98565b5b6000613e8a86828701613beb565b9350506020613e9b86828701613c21565b9250506040613eac86828701613c21565b9150509250925092565b60008060008060808587031215613ed057613ecf613b98565b5b6000613ede87828801613c21565b9450506020613eef87828801613beb565b9350506040613f0087828801613c21565b9250506060613f1187828801613d6d565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f4257613f41613f1d565b5b8235905067ffffffffffffffff811115613f5f57613f5e613f22565b5b602083019150836001820283011115613f7b57613f7a613f27565b5b9250929050565b600081905082602060020282011115613f9e57613f9d613f27565b5b92915050565b60008083601f840112613fba57613fb9613f1d565b5b8235905067ffffffffffffffff811115613fd757613fd6613f22565b5b602083019150836001820283011115613ff357613ff2613f27565b5b9250929050565b6000806000806000806000806000806101408b8d03121561401e5761401d613b98565b5b60008b013567ffffffffffffffff81111561403c5761403b613b9d565b5b6140488d828e01613f2c565b9a509a5050602061405b8d828e01613c21565b985050604061406c8d828e01613f82565b975050608061407d8d828e01613f82565b96505060c061408e8d828e01613c21565b95505060e061409f8d828e01613d6d565b9450506101006140b18d828e01613d6d565b9350506101208b013567ffffffffffffffff8111156140d3576140d2613b9d565b5b6140df8d828e01613fa4565b92509250509295989b9194979a5092959850565b6140fc81613c00565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412e83836140f3565b60208301905092915050565b6000602082019050919050565b61415081614102565b61415a818461410d565b925061416582614118565b8060005b8381101561419657815161417d8782614122565b96506141888361413a565b925050600181019050614169565b505050505050565b6141a781613c76565b82525050565b60e0820160008201516141c360008501826140f3565b5060208201516141d66020850182614147565b5060408201516141e96060850182614147565b5060608201516141fc60a08501826140f3565b50608082015161420f60c085018261419e565b50505050565b600081519050919050565b600082825260208201905092915050565b600061423c82614215565b6142468185614220565b9350614256818560208601613af8565b61425f81613b22565b840191505092915050565b600061024082019050614280600083018f613cac565b8181036020830152614292818e613b33565b90506142a1604083018d613e0c565b6142ae606083018c613cac565b6142bb608083018b613cac565b6142c860a083018a6141ad565b6142d6610180830189613cac565b6142e46101a0830188613cac565b6142f26101c0830187613c82565b6143006101e0830186613c82565b61430e610200830185613c82565b8181036102208301526143218184614231565b90509d9c50505050505050505050505050565b6000806020838503121561434b5761434a613b98565b5b600083013567ffffffffffffffff81111561436957614368613b9d565b5b61437585828601613f2c565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143b681613bc2565b82525050565b6040820160008201516143d260008501826140f3565b5060208201516143e560208501826143ad565b50505050565b60006143f783836143bc565b60408301905092915050565b6000602082019050919050565b600061441b82614381565b614425818561438c565b93506144308361439d565b8060005b8381101561446157815161444888826143eb565b975061445383614403565b925050600181019050614434565b5085935050505092915050565b600060208201905081810360008301526144888184614410565b905092915050565b600080604083850312156144a7576144a6613b98565b5b60006144b585828601613beb565b92505060206144c685828601613beb565b9150509250929050565b60008083601f8401126144e6576144e5613f1d565b5b8235905067ffffffffffffffff81111561450357614502613f22565b5b60208301915083604082028301111561451f5761451e613f27565b5b9250929050565b60008083601f84011261453c5761453b613f1d565b5b8235905067ffffffffffffffff81111561455957614558613f22565b5b60208301915083602082028301111561457557614574613f27565b5b9250929050565b6000806000806000806060878903121561459957614598613b98565b5b600087013567ffffffffffffffff8111156145b7576145b6613b9d565b5b6145c389828a016144d0565b9650965050602087013567ffffffffffffffff8111156145e6576145e5613b9d565b5b6145f289828a01613f2c565b9450945050604087013567ffffffffffffffff81111561461557614614613b9d565b5b61462189828a01614526565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61466d82613b22565b810181811067ffffffffffffffff8211171561468c5761468b614635565b5b80604052505050565b600061469f613b8e565b90506146ab8282614664565b919050565b600067ffffffffffffffff8211156146cb576146ca614635565b5b6146d482613b22565b9050602081019050919050565b82818337600083830152505050565b60006147036146fe846146b0565b614695565b90508281526020810184848401111561471f5761471e614630565b5b61472a8482856146e1565b509392505050565b600082601f83011261474757614746613f1d565b5b81356147578482602086016146f0565b91505092915050565b60006020828403121561477657614775613b98565b5b600082013567ffffffffffffffff81111561479457614793613b9d565b5b6147a084828501614732565b91505092915050565b600060608201905081810360008301526147c38186613b33565b90506147d26020830185613e0c565b6147df6040830184613cac565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482e57607f821691505b602082108103614841576148406147e7565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061487d601883613ae7565b915061488882614847565b602082019050919050565b600060208201905081810360008301526148ac81614870565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148ed82613c00565b91506148f883613c00565b92508282019050808211156149105761490f6148b3565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495082613c00565b915061495b83613c00565b92508261496b5761496a614916565b5b828204905092915050565b600061498182613c00565b915061498c83613c00565b92508261499c5761499b614916565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a03602183613ae7565b9150614a0e826149a7565b604082019050919050565b60006020820190508181036000830152614a32816149f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a7382613c00565b9150614a7e83613c00565b9250828202614a8c81613c00565b91508282048414831517614aa357614aa26148b3565b5b5092915050565b6000606082019050614abf6000830186613cac565b614acc6020830185613c82565b614ad96040830184613c82565b949350505050565b60008190508160005260206000209050919050565b60008154614b0381614816565b614b0d8186614220565b94506001821660008114614b285760018114614b3e57614b71565b60ff198316865281151560200286019350614b71565b614b4785614ae1565b60005b83811015614b6957815481890152600182019150602081019050614b4a565b808801955050505b50505092915050565b600060a082019050614b8f6000830188613c82565b614b9c6020830187613c82565b614ba96040830186613cac565b614bb66060830185613cac565b8181036080830152614bc88184614af6565b90509695505050505050565b600081519050614be381613c0a565b92915050565b600060208284031215614bff57614bfe613b98565b5b6000614c0d84828501614bd4565b91505092915050565b6000614c2182613c00565b9150614c2c83613c00565b9250828203905081811115614c4457614c436148b3565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c80601b83613ae7565b9150614c8b82614c4a565b602082019050919050565b60006020820190508181036000830152614caf81614c73565b9050919050565b6000606082019050614ccb6000830186613e0c565b614cd86020830185613cac565b614ce56040830184613cac565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d49602b83613ae7565b9150614d5482614ced565b604082019050919050565b60006020820190508181036000830152614d7881614d3c565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614db5601583613ae7565b9150614dc082614d7f565b602082019050919050565b60006020820190508181036000830152614de481614da8565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e21601483613ae7565b9150614e2c82614deb565b602082019050919050565b60006020820190508181036000830152614e5081614e14565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e8d601783613ae7565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614ef9601a83613ae7565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f65601d83613ae7565b9150614f7082614f2f565b602082019050919050565b60006020820190508181036000830152614f9481614f58565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fd1601e83613ae7565b9150614fdc82614f9b565b602082019050919050565b6000602082019050818103600083015261500081614fc4565b9050919050565b600081905092915050565b600061501e8385615007565b935061502b8385846146e1565b82840190509392505050565b6000615044828486615012565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000615086601583613ae7565b915061509182615050565b602082019050919050565b600060208201905081810360008301526150b581615079565b9050919050565b60006150c782613c00565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150f9576150f86148b3565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615134565b61517b8683615134565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151b86151b36151ae84613c00565b615193565b613c00565b9050919050565b6000819050919050565b6151d28361519d565b6151e66151de826151bf565b848454615141565b825550505050565b600090565b6151fb6151ee565b6152068184846151c9565b505050565b5b8181101561522a5761521f6000826151f3565b60018101905061520c565b5050565b601f82111561526f576152408161510f565b61524984615124565b81016020851015615258578190505b61526c61526485615124565b83018261520b565b50505b505050565b600082821c905092915050565b600061529260001984600802615274565b1980831691505092915050565b60006152ab8383615281565b9150826002028217905092915050565b6152c58383615104565b67ffffffffffffffff8111156152de576152dd614635565b5b6152e88254614816565b6152f382828561522e565b6000601f8311600181146153225760008415615310578287013590505b61531a858261529f565b865550615382565b601f1984166153308661510f565b60005b8281101561535857848901358255600182019150602085019450602081019050615333565b868310156153755784890135615371601f891682615281565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153d7576153a881614ae1565b6153b184615124565b810160208510156153c0578190505b6153d46153cc85615124565b83018261520b565b50505b505050565b6153e6838361538b565b67ffffffffffffffff8111156153ff576153fe614635565b5b6154098254614816565b615414828285615396565b6000601f8311600181146154435760008415615431578287013590505b61543b858261529f565b8655506154a3565b601f19841661545186614ae1565b60005b8281101561547957848901358255600182019150602085019450602081019050615454565b868310156154965784890135615492601f891682615281565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b6000615508602583613ae7565b9150615513826154ac565b604082019050919050565b60006020820190508181036000830152615537816154fb565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061559a602983613ae7565b91506155a58261553e565b604082019050919050565b600060208201905081810360008301526155c98161558d565b9050919050565b600081356155dd81613c0a565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61561f846155e6565b9350801983169250808416831791505092915050565b61563e8261519d565b61565161564a826151bf565b83546155f3565b8255505050565b6000813561566581613bd4565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff61568e846155e6565b9350801983169250808416831791505092915050565b60006156bf6156ba6156b584613ba2565b615193565b613ba2565b9050919050565b60006156d1826156a4565b9050919050565b60006156e3826156c6565b9050919050565b6000819050919050565b6156fd826156d8565b615710615709826156ea565b835461566e565b8255505050565b600081016000830180615729816155d0565b90506157358184615635565b50505060018101602083018061574a81615658565b905061575681846156f4565b5050505050565b6157678282615717565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006157c7602283613ae7565b91506157d28261576b565b604082019050919050565b600060208201905081810360008301526157f6816157ba565b9050919050565b600080fd5b600080fd5b600080fd5b600082356001604003833603038112615828576158276157fd565b5b80830191505092915050565b6000819050919050565b61584781615834565b811461585257600080fd5b50565b600081356158628161583e565b80915050919050565b600061588661588161587c84615834565b615193565b615834565b9050919050565b6000819050919050565b6158a08261586b565b6158b36158ac8261588d565b83546155f3565b8255505050565b600080833560016020038436030381126158d7576158d66157fd565b5b80840192508235915067ffffffffffffffff8211156158f9576158f8615802565b5b60208301925060018202360383131561591557615914615807565b5b509250929050565b6159288383836152bb565b505050565b60008101600083018061593f81615855565b905061594b8184615897565b505050600181016020830161596081856158ba565b61596b81838661591d565b505050505050565b61597d828261592d565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b60006159dd602883613ae7565b91506159e882615981565b604082019050919050565b60006020820190508181036000830152615a0c816159d0565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615a6f602783613ae7565b9150615a7a82615a13565b604082019050919050565b60006020820190508181036000830152615a9e81615a62565b9050919050565b6000615ab082615834565b9150615abb83615834565b925082820190508281121560008312168382126000841215161715615ae357615ae26148b3565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615b45602c83613ae7565b9150615b5082615ae9565b604082019050919050565b60006020820190508181036000830152615b7481615b38565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615bd7602d83613ae7565b9150615be282615b7b565b604082019050919050565b60006020820190508181036000830152615c0681615bca565b9050919050565b6000615c198385613ae7565b9350615c268385846146e1565b615c2f83613b22565b840190509392505050565b60006020820190508181036000830152615c55818486615c0d565b90509392505050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615c94601883613ae7565b9150615c9f82615c5e565b602082019050919050565b60006020820190508181036000830152615cc381615c87565b9050919050565b6000615cd582613adc565b615cdf8185615007565b9350615cef818560208601613af8565b80840191505092915050565b6000615d078284615cca565b915081905092915050565b6000615d1d82615834565b9150615d2883615834565b9250828203905081811260008412168282136000851215161715615d4f57615d4e6148b3565b5b92915050565b6000615d6082615834565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d9257615d916148b3565b5b816000039050919050565b6000615da882615834565b9150615db383615834565b9250828202615dc181615834565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615df957615df86148b3565b5b8282058414831517615e0e57615e0d6148b3565b5b5092915050565b6000615e2082615834565b9150615e2b83615834565b925082615e3b57615e3a614916565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e7457615e736148b3565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615edb602683613ae7565b9150615ee682615e7f565b604082019050919050565b60006020820190508181036000830152615f0a81615ece565b905091905056fea26469706673582212209f1eb3ff12aa3e0b4012bf2fd5064caa9b3995b97c752a0a223c5e60febeb27a64736f6c63430008180033",
"linkReferences": {},
"deployedLinkReferences": {}
}