608060405234801561000f575f80fd5b50604051611d7f380380611d7f83398181016040528101906100319190610544565b806040518060400160405280600881526020017f436f6d706f756e640000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f636d70640000000000000000000000000000000000000000000000000000000081525081600390816100ad91906107a9565b5080600490816100bd91906107a9565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101279190610887565b60405180910390fd5b61013f8161017d60201b60201c565b506101773061015261024060201b60201c565b600a61015e9190610a08565b620186a061016c9190610a52565b61024860201b60201c565b50610b23565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b8575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102af9190610887565b60405180910390fd5b6102c95f83836102cd60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361031d578060025f8282546103119190610a93565b925050819055506103eb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156103a6578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161039d93929190610ad5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610432578060025f828254039250508190555061047c565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104d99190610b0a565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610513826104ea565b9050919050565b61052381610509565b811461052d575f80fd5b50565b5f8151905061053e8161051a565b92915050565b5f60208284031215610559576105586104e6565b5b5f61056684828501610530565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806105ea57607f821691505b6020821081036105fd576105fc6105a6565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261065f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610624565b6106698683610624565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6106ad6106a86106a384610681565b61068a565b610681565b9050919050565b5f819050919050565b6106c683610693565b6106da6106d2826106b4565b848454610630565b825550505050565b5f90565b6106ee6106e2565b6106f98184846106bd565b505050565b5b8181101561071c576107115f826106e6565b6001810190506106ff565b5050565b601f8211156107615761073281610603565b61073b84610615565b8101602085101561074a578190505b61075e61075685610615565b8301826106fe565b50505b505050565b5f82821c905092915050565b5f6107815f1984600802610766565b1980831691505092915050565b5f6107998383610772565b9150826002028217905092915050565b6107b28261056f565b67ffffffffffffffff8111156107cb576107ca610579565b5b6107d582546105d3565b6107e0828285610720565b5f60209050601f831160018114610811575f84156107ff578287015190505b610809858261078e565b865550610870565b601f19841661081f86610603565b5f5b8281101561084657848901518255600182019150602085019450602081019050610821565b86831015610863578489015161085f601f891682610772565b8355505b6001600288020188555050505b505050505050565b61088181610509565b82525050565b5f60208201905061089a5f830184610878565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610922578086048111156108fe576108fd6108a0565b5b600185161561090d5780820291505b808102905061091b856108cd565b94506108e2565b94509492505050565b5f8261093a57600190506109f5565b81610947575f90506109f5565b816001811461095d576002811461096757610996565b60019150506109f5565b60ff841115610979576109786108a0565b5b8360020a9150848211156109905761098f6108a0565b5b506109f5565b5060208310610133831016604e8410600b84101617156109cb5782820a9050838111156109c6576109c56108a0565b5b6109f5565b6109d884848460016108d9565b925090508184048111156109ef576109ee6108a0565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610a1282610681565b9150610a1d836109fc565b9250610a4a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461092b565b905092915050565b5f610a5c82610681565b9150610a6783610681565b9250828202610a7581610681565b91508282048414831517610a8c57610a8b6108a0565b5b5092915050565b5f610a9d82610681565b9150610aa883610681565b9250828201905080821115610ac057610abf6108a0565b5b92915050565b610acf81610681565b82525050565b5f606082019050610ae85f830186610878565b610af56020830185610ac6565b610b026040830184610ac6565b949350505050565b5f602082019050610b1d5f830184610ac6565b92915050565b61124f80610b305f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c806370a082311161009557806395d89b411161006457806395d89b411461025d578063a9059cbb1461027b578063dd62ed3e146102ab578063f2fde38b146102db576100f3565b806370a08231146101e9578063715018a61461021957806379cc6790146102235780638da5cb5b1461023f576100f3565b806323b872dd116100d157806323b872dd14610163578063313ce5671461019357806340c10f19146101b157806342966c68146101cd576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff6102f7565b60405161010c9190610e9d565b60405180910390f35b61012f600480360381019061012a9190610f4e565b610387565b60405161013c9190610fa6565b60405180910390f35b61014d6103a9565b60405161015a9190610fce565b60405180910390f35b61017d60048036038101906101789190610fe7565b6103b2565b60405161018a9190610fa6565b60405180910390f35b61019b6103e0565b6040516101a89190611052565b60405180910390f35b6101cb60048036038101906101c69190610f4e565b6103e8565b005b6101e760048036038101906101e2919061106b565b6103f6565b005b61020360048036038101906101fe9190611096565b61040a565b6040516102109190610fce565b60405180910390f35b61022161044f565b005b61023d60048036038101906102389190610f4e565b610462565b005b610247610482565b60405161025491906110d0565b60405180910390f35b6102656104aa565b6040516102729190610e9d565b60405180910390f35b61029560048036038101906102909190610f4e565b61053a565b6040516102a29190610fa6565b60405180910390f35b6102c560048036038101906102c091906110e9565b61055c565b6040516102d29190610fce565b60405180910390f35b6102f560048036038101906102f09190611096565b6105de565b005b60606003805461030690611154565b80601f016020809104026020016040519081016040528092919081815260200182805461033290611154565b801561037d5780601f106103545761010080835404028352916020019161037d565b820191905f5260205f20905b81548152906001019060200180831161036057829003601f168201915b5050505050905090565b5f80610391610662565b905061039e818585610669565b600191505092915050565b5f600254905090565b5f806103bc610662565b90506103c985828561067b565b6103d485858561070d565b60019150509392505050565b5f6012905090565b6103f282826107fd565b5050565b610407610401610662565b8261087c565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104576108fb565b6104605f610982565b565b6104748261046e610662565b8361067b565b61047e828261087c565b5050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104b990611154565b80601f01602080910402602001604051908101604052809291908181526020018280546104e590611154565b80156105305780601f1061050757610100808354040283529160200191610530565b820191905f5260205f20905b81548152906001019060200180831161051357829003601f168201915b5050505050905090565b5f80610544610662565b905061055181858561070d565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6105e66108fb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610656575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161064d91906110d0565b60405180910390fd5b61065f81610982565b50565b5f33905090565b6106768383836001610a45565b505050565b5f610686848461055c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461070757818110156106f8578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106ef93929190611184565b60405180910390fd5b61070684848484035f610a45565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361077d575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161077491906110d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107ed575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107e491906110d0565b60405180910390fd5b6107f8838383610c14565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361086d575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161086491906110d0565b60405180910390fd5b6108785f8383610c14565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108ec575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108e391906110d0565b60405180910390fd5b6108f7825f83610c14565b5050565b610903610662565b73ffffffffffffffffffffffffffffffffffffffff16610921610482565b73ffffffffffffffffffffffffffffffffffffffff161461098057610944610662565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161097791906110d0565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ab5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610aac91906110d0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b25575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610b1c91906110d0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610c0e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c059190610fce565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c64578060025f828254610c5891906111e6565b92505081905550610d32565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610ced578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ce493929190611184565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d79578060025f8282540392505081905550610dc3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e209190610fce565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610e6f82610e2d565b610e798185610e37565b9350610e89818560208601610e47565b610e9281610e55565b840191505092915050565b5f6020820190508181035f830152610eb58184610e65565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610eea82610ec1565b9050919050565b610efa81610ee0565b8114610f04575f80fd5b50565b5f81359050610f1581610ef1565b92915050565b5f819050919050565b610f2d81610f1b565b8114610f37575f80fd5b50565b5f81359050610f4881610f24565b92915050565b5f8060408385031215610f6457610f63610ebd565b5b5f610f7185828601610f07565b9250506020610f8285828601610f3a565b9150509250929050565b5f8115159050919050565b610fa081610f8c565b82525050565b5f602082019050610fb95f830184610f97565b92915050565b610fc881610f1b565b82525050565b5f602082019050610fe15f830184610fbf565b92915050565b5f805f60608486031215610ffe57610ffd610ebd565b5b5f61100b86828701610f07565b935050602061101c86828701610f07565b925050604061102d86828701610f3a565b9150509250925092565b5f60ff82169050919050565b61104c81611037565b82525050565b5f6020820190506110655f830184611043565b92915050565b5f602082840312156110805761107f610ebd565b5b5f61108d84828501610f3a565b91505092915050565b5f602082840312156110ab576110aa610ebd565b5b5f6110b884828501610f07565b91505092915050565b6110ca81610ee0565b82525050565b5f6020820190506110e35f8301846110c1565b92915050565b5f80604083850312156110ff576110fe610ebd565b5b5f61110c85828601610f07565b925050602061111d85828601610f07565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061116b57607f821691505b60208210810361117e5761117d611127565b5b50919050565b5f6060820190506111975f8301866110c1565b6111a46020830185610fbf565b6111b16040830184610fbf565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6111f082610f1b565b91506111fb83610f1b565b9250828201905080821115611213576112126111b9565b5b9291505056fea26469706673582212208a9459419924af52c2d554aa1871268d38de2e92be280950ae20f9a57dce6f0164736f6c634300081a0033000000000000000000000000c0f77df13346dc7fd92a115d3abe54ded60dbdf5