608060405234801561000f575f80fd5b5060405161441938038061441983398181016040528101906100319190610852565b886040518060400160405280601281526020017f54686541726368697465637473447265616d00000000000000000000000000008152506040518060400160405280600381526020017f544144000000000000000000000000000000000000000000000000000000000081525081600390816100ad9190610b50565b5080600490816100bd9190610b50565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101279190610c2e565b60405180910390fd5b61013f816103dc60201b60201c565b508760065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103b08961049f60201b60201c565b6103ce896103c38b61052f60201b60201c565b61057460201b60201c565b505050505050505050610ce5565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6104ad61072c60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361051d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105149190610c2e565b60405180910390fd5b61052c816103dc60201b60201c565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d990610cc7565b60405180910390fd5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166106e6576001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600882908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b61073a6107c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661075e6107cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107c3576107876107c560201b60201c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016107ba9190610c2e565b60405180910390fd5b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610821826107f8565b9050919050565b61083181610817565b811461083b575f80fd5b50565b5f8151905061084c81610828565b92915050565b5f805f805f805f805f6101208a8c0312156108705761086f6107f4565b5b5f61087d8c828d0161083e565b995050602061088e8c828d0161083e565b985050604061089f8c828d0161083e565b97505060606108b08c828d0161083e565b96505060806108c18c828d0161083e565b95505060a06108d28c828d0161083e565b94505060c06108e38c828d0161083e565b93505060e06108f48c828d0161083e565b9250506101006109068c828d0161083e565b9150509295985092959850929598565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061099157607f821691505b6020821081036109a4576109a361094d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109cb565b610a1086836109cb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a54610a4f610a4a84610a28565b610a31565b610a28565b9050919050565b5f819050919050565b610a6d83610a3a565b610a81610a7982610a5b565b8484546109d7565b825550505050565b5f90565b610a95610a89565b610aa0818484610a64565b505050565b5b81811015610ac357610ab85f82610a8d565b600181019050610aa6565b5050565b601f821115610b0857610ad9816109aa565b610ae2846109bc565b81016020851015610af1578190505b610b05610afd856109bc565b830182610aa5565b50505b505050565b5f82821c905092915050565b5f610b285f1984600802610b0d565b1980831691505092915050565b5f610b408383610b19565b9150826002028217905092915050565b610b5982610916565b67ffffffffffffffff811115610b7257610b71610920565b5b610b7c825461097a565b610b87828285610ac7565b5f60209050601f831160018114610bb8575f8415610ba6578287015190505b610bb08582610b35565b865550610c17565b601f198416610bc6866109aa565b5f5b82811015610bed57848901518255600182019150602085019450602081019050610bc8565b86831015610c0a5784890151610c06601f891682610b19565b8355505b6001600288020188555050505b505050505050565b610c2881610817565b82525050565b5f602082019050610c415f830184610c1f565b92915050565b5f82825260208201905092915050565b7f4163636f756e7420616464726573732063616e6e6f7420626520746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f610cb1602a83610c47565b9150610cbc82610c57565b604082019050919050565b5f6020820190508181035f830152610cde81610ca5565b9050919050565b61372780610cf25f395ff3fe608060405234801561000f575f80fd5b50600436106101e3575f3560e01c8063715018a61161010d578063bc8409a4116100a0578063dd62ed3e1161006f578063dd62ed3e14610524578063e4849b3214610554578063f2fde38b14610570578063fbfa77cf1461058c576101e3565b8063bc8409a4146104b0578063bfb451fe146104ce578063d0a5eb4e146104ea578063d469801614610506576101e3565b8063a0712d68116100dc578063a0712d681461042a578063a198043014610446578063a794092014610462578063a9059cbb14610480576101e3565b8063715018a6146103c65780638da5cb5b146103d05780638ea5220f146103ee57806395d89b411461040c576101e3565b806323b62b7511610185578063430bf08a11610154578063430bf08a146103505780635b35f9c91461036e5780636f4a2cd01461038c57806370a0823114610396576101e3565b806323b62b75146102c857806323b872dd146102e6578063296f0a0c14610316578063313ce56714610332576101e3565b806313bb8683116101c157806313bb86831461025357806318160ddd1461026f5780631d92f25e1461028d5780631f53ac02146102ac576101e3565b806306fdde03146101e7578063095ea7b31461020557806311eac85514610235575b5f80fd5b6101ef6105aa565b6040516101fc9190612b51565b60405180910390f35b61021f600480360381019061021a9190612c02565b61063a565b60405161022c9190612c5a565b60405180910390f35b61023d61065c565b60405161024a9190612cce565b60405180910390f35b61026d60048036038101906102689190612ce7565b610681565b005b610277610741565b6040516102849190612d21565b60405180910390f35b61029561074a565b6040516102a3929190612ea8565b60405180910390f35b6102c660048036038101906102c19190612ce7565b6108e4565b005b6102d06109a4565b6040516102dd9190612eec565b60405180910390f35b61030060048036038101906102fb9190612f05565b6109c9565b60405161030d9190612c5a565b60405180910390f35b610330600480360381019061032b9190612ce7565b6109f7565b005b61033a610ab7565b6040516103479190612f70565b60405180910390f35b610358610abf565b6040516103659190612eec565b60405180910390f35b610376610ae4565b6040516103839190612eec565b60405180910390f35b610394610b09565b005b6103b060048036038101906103ab9190612ce7565b610e2d565b6040516103bd9190612d21565b60405180910390f35b6103ce610e72565b005b6103d8610e85565b6040516103e59190612eec565b60405180910390f35b6103f6610ead565b6040516104039190612eec565b60405180910390f35b610414610ed2565b6040516104219190612b51565b60405180910390f35b610444600480360381019061043f9190612f89565b610f62565b005b610460600480360381019061045b9190612ce7565b611593565b005b61046a611653565b6040516104779190612eec565b60405180910390f35b61049a60048036038101906104959190612c02565b611678565b6040516104a79190612c5a565b60405180910390f35b6104b861169a565b6040516104c59190612eec565b60405180910390f35b6104e860048036038101906104e39190612ce7565b6116bf565b005b61050460048036038101906104ff9190612ce7565b61177f565b005b61050e61183f565b60405161051b9190612eec565b60405180910390f35b61053e60048036038101906105399190612fb4565b611864565b60405161054b9190612d21565b60405180910390f35b61056e60048036038101906105699190612f89565b6118e6565b005b61058a60048036038101906105859190612ce7565b611b0d565b005b610594611b91565b6040516105a19190613012565b60405180910390f35b6060600380546105b990613058565b80601f01602080910402602001604051908101604052809291908181526020018280546105e590613058565b80156106305780601f1061060757610100808354040283529160200191610630565b820191905f5260205f20905b81548152906001019060200180831161061357829003601f168201915b5050505050905090565b5f80610644611bb6565b9050610651818585611bbd565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610689611bcf565b610691610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f5906130f8565b60405180910390fd5b8060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600254905090565b6060805f60088054905067ffffffffffffffff81111561076d5761076c613116565b5b60405190808252806020026020018201604052801561079b5781602001602082028036833780820191505090505b5090505f5b6008805490508110156108525760095f600883815481106107c4576107c3613143565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482828151811061083957610838613143565b5b60200260200101818152505080806001019150506107a0565b50600881818054806020026020016040519081016040528092919081815260200182805480156108d457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161088b575b5050505050915092509250509091565b6108ec611bcf565b6108f4610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610958906130f8565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806109d3611bb6565b90506109e0858285611c56565b6109eb858585611ce8565b60019150509392505050565b6109ff611bcf565b610a07610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b906130f8565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6012905090565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b11611bcf565b610b19610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d906130f8565b60405180910390fd5b5f610bb160105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610bdb600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c05600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c2f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c59600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c83600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c8d919061319d565b610c97919061319d565b610ca1919061319d565b610cab919061319d565b610cb5919061319d565b90505f81610cc1610741565b610ccb91906131d0565b90505f610cf8600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b90505f82118015610d0857505f81115b15610e28575f80610d1761074a565b915091505f5b8251811015610ded575f828281518110610d3a57610d39613143565b5b602002602001015190505f811115610ddf575f868683610d5a9190613203565b610d649190613271565b905080610d91600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b10610ddd57610ddc600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868581518110610dce57610dcd613143565b5b602002602001015183611ce8565b5b505b508080600101915050610d1d565b507f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be44283604051610e1d9190612d21565b60405180910390a150505b505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e7a611bcf565b610e835f611dd8565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610ee190613058565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0d90613058565b8015610f585780601f10610f2f57610100808354040283529160200191610f58565b820191905f5260205f20905b815481529060010190602001808311610f3b57829003601f168201915b5050505050905090565b5f8111610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613311565b60405180910390fd5b8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fff9190612eec565b602060405180830381865afa15801561101a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103e9190613343565b101561107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906133b8565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110fc9291906133d6565b6020604051808303815f875af1158015611118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113c9190613427565b508060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b815260040161119a929190613452565b602060405180830381865afa1580156111b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d99190613343565b101561121a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611211906134c3565b60405180910390fd5b5f64e8d4a510008261122c9190613203565b90505f606460088361123e9190613203565b6112489190613271565b90505f818361125791906131d0565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016112b7939291906134e1565b6020604051808303815f875af11580156112d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f79190613427565b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e553f6585306040518363ffffffff1660e01b8152600401611354929190613516565b5f604051808303815f87803b15801561136b575f80fd5b505af115801561137d573d5f803e3d5ffd5b505050505f60646001856113919190613203565b61139b9190613271565b90505f60646001866113ad9190613203565b6113b79190613271565b90505f60646001876113c99190613203565b6113d39190613271565b90505f60646002886113e59190613203565b6113ef9190613271565b90505f6103e8600f896114029190613203565b61140c9190613271565b90505f6103e8600f8a61141f9190613203565b6114299190613271565b9050611456600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611e9b565b611481600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611e9b565b6114ac600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e9b565b6114d7600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e9b565b611502600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e9b565b61152d60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e9b565b6115373388611e9b565b3373ffffffffffffffffffffffffffffffffffffffff167f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f338b8960405161157f92919061353d565b60405180910390a250505050505050505050565b61159b611bcf565b6115a3610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611610576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611607906130f8565b60405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80611682611bb6565b905061168f818585611ce8565b600191505092915050565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116c7611bcf565b6116cf610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611733906130f8565b60405180910390fd5b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611787611bcf565b61178f610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f3906130f8565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8111611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90613311565b60405180910390fd5b5f64e8d4a510008261193a9190613203565b90508061194633610e2d565b1015611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906135ae565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b460af948330306040518463ffffffff1660e01b81526004016119e5939291906135cc565b5f604051808303815f87803b1580156119fc575f80fd5b505af1158015611a0e573d5f803e3d5ffd5b50505050611a1c3382611f1a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611a789291906133d6565b6020604051808303815f875af1158015611a94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab89190613427565b503373ffffffffffffffffffffffffffffffffffffffff167f2dcf9433d75db0d8b1c172641f85e319ffe4ad22e108a95d1847ceb906e5195d8284604051611b0192919061353d565b60405180910390a25050565b611b15611bcf565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b85575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611b7c9190612eec565b60405180910390fd5b611b8e81611dd8565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b611bca8383836001611f99565b505050565b611bd7611bb6565b73ffffffffffffffffffffffffffffffffffffffff16611bf5610e85565b73ffffffffffffffffffffffffffffffffffffffff1614611c5457611c18611bb6565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611c4b9190612eec565b60405180910390fd5b565b5f611c618484611864565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ce25781811015611cd3578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611cca93929190613601565b60405180910390fd5b611ce184848484035f611f99565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d58575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611d4f9190612eec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611dc8575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611dbf9190612eec565b60405180910390fd5b611dd3838383612168565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f0b575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611f029190612eec565b60405180910390fd5b611f165f8383612168565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f8a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611f819190612eec565b60405180910390fd5b611f95825f83612168565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612009575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016120009190612eec565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612079575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016120709190612eec565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015612162578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516121599190612d21565b60405180910390a35b50505050565b612173838383612223565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156121b557506121b38361243c565b155b156121c4576121c3836126b3565b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561220657506122048261243c565b155b1561221e5761221d8261221884610e2d565b612929565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612273578060025f828254612267919061319d565b92505081905550612341565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156122fc578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016122f393929190613601565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612388578060025f82825403925050819055506123d2565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161242f9190612d21565b60405180910390a3505050565b5f806040518060c00160405280600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525090505f5b60068110156126a85781816006811061265957612658613143565b5b602002015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361269b576001925050506126ae565b808060010191505061263d565b505f9150505b919050565b5f6126bd82610e2d565b1480156127105750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612926575f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f5b600880549050811015612924578173ffffffffffffffffffffffffffffffffffffffff16600882815481106127e5576127e4613143565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612917576008600160088054905061283c91906131d0565b8154811061284d5761284c613143565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061288957612888613143565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060088054806128e0576128df613636565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612924565b80806001019150506127ad565b505b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e906136d3565b60405180910390fd5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a9b576001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600882908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b2382612ae1565b612b2d8185612aeb565b9350612b3d818560208601612afb565b612b4681612b09565b840191505092915050565b5f6020820190508181035f830152612b698184612b19565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b9e82612b75565b9050919050565b612bae81612b94565b8114612bb8575f80fd5b50565b5f81359050612bc981612ba5565b92915050565b5f819050919050565b612be181612bcf565b8114612beb575f80fd5b50565b5f81359050612bfc81612bd8565b92915050565b5f8060408385031215612c1857612c17612b71565b5b5f612c2585828601612bbb565b9250506020612c3685828601612bee565b9150509250929050565b5f8115159050919050565b612c5481612c40565b82525050565b5f602082019050612c6d5f830184612c4b565b92915050565b5f819050919050565b5f612c96612c91612c8c84612b75565b612c73565b612b75565b9050919050565b5f612ca782612c7c565b9050919050565b5f612cb882612c9d565b9050919050565b612cc881612cae565b82525050565b5f602082019050612ce15f830184612cbf565b92915050565b5f60208284031215612cfc57612cfb612b71565b5b5f612d0984828501612bbb565b91505092915050565b612d1b81612bcf565b82525050565b5f602082019050612d345f830184612d12565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d6c81612b94565b82525050565b5f612d7d8383612d63565b60208301905092915050565b5f602082019050919050565b5f612d9f82612d3a565b612da98185612d44565b9350612db483612d54565b805f5b83811015612de4578151612dcb8882612d72565b9750612dd683612d89565b925050600181019050612db7565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e2381612bcf565b82525050565b5f612e348383612e1a565b60208301905092915050565b5f602082019050919050565b5f612e5682612df1565b612e608185612dfb565b9350612e6b83612e0b565b805f5b83811015612e9b578151612e828882612e29565b9750612e8d83612e40565b925050600181019050612e6e565b5085935050505092915050565b5f6040820190508181035f830152612ec08185612d95565b90508181036020830152612ed48184612e4c565b90509392505050565b612ee681612b94565b82525050565b5f602082019050612eff5f830184612edd565b92915050565b5f805f60608486031215612f1c57612f1b612b71565b5b5f612f2986828701612bbb565b9350506020612f3a86828701612bbb565b9250506040612f4b86828701612bee565b9150509250925092565b5f60ff82169050919050565b612f6a81612f55565b82525050565b5f602082019050612f835f830184612f61565b92915050565b5f60208284031215612f9e57612f9d612b71565b5b5f612fab84828501612bee565b91505092915050565b5f8060408385031215612fca57612fc9612b71565b5b5f612fd785828601612bbb565b9250506020612fe885828601612bbb565b9150509250929050565b5f612ffc82612c9d565b9050919050565b61300c81612ff2565b82525050565b5f6020820190506130255f830184613003565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061306f57607f821691505b6020821081036130825761308161302b565b5b50919050565b7f4f6e6c79206f776e65722063616e2064697374726962757465207265776172645f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130e2602183612aeb565b91506130ed82613088565b604082019050919050565b5f6020820190508181035f83015261310f816130d6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131a782612bcf565b91506131b283612bcf565b92508282019050808211156131ca576131c9613170565b5b92915050565b5f6131da82612bcf565b91506131e583612bcf565b92508282039050818111156131fd576131fc613170565b5b92915050565b5f61320d82612bcf565b915061321883612bcf565b925082820261322681612bcf565b9150828204841483151761323d5761323c613170565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61327b82612bcf565b915061328683612bcf565b92508261329657613295613244565b5b828204905092915050565b7f5553444320616d6f756e74206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f6132fb602283612aeb565b9150613306826132a1565b604082019050919050565b5f6020820190508181035f830152613328816132ef565b9050919050565b5f8151905061333d81612bd8565b92915050565b5f6020828403121561335857613357612b71565b5b5f6133658482850161332f565b91505092915050565b7f496e73756666696369656e7420555344432062616c616e6365000000000000005f82015250565b5f6133a2601983612aeb565b91506133ad8261336e565b602082019050919050565b5f6020820190508181035f8301526133cf81613396565b9050919050565b5f6040820190506133e95f830185612edd565b6133f66020830184612d12565b9392505050565b61340681612c40565b8114613410575f80fd5b50565b5f81519050613421816133fd565b92915050565b5f6020828403121561343c5761343b612b71565b5b5f61344984828501613413565b91505092915050565b5f6040820190506134655f830185612edd565b6134726020830184612edd565b9392505050565b7f496e73756666696369656e74205553444320616c6c6f77616e636500000000005f82015250565b5f6134ad601b83612aeb565b91506134b882613479565b602082019050919050565b5f6020820190508181035f8301526134da816134a1565b9050919050565b5f6060820190506134f45f830186612edd565b6135016020830185612edd565b61350e6040830184612d12565b949350505050565b5f6040820190506135295f830185612d12565b6135366020830184612edd565b9392505050565b5f6040820190506135505f830185612d12565b61355d6020830184612d12565b9392505050565b7f496e73756666696369656e74205441442062616c616e636500000000000000005f82015250565b5f613598601883612aeb565b91506135a382613564565b602082019050919050565b5f6020820190508181035f8301526135c58161358c565b9050919050565b5f6060820190506135df5f830186612d12565b6135ec6020830185612edd565b6135f96040830184612edd565b949350505050565b5f6060820190506136145f830186612edd565b6136216020830185612d12565b61362e6040830184612d12565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4163636f756e7420616464726573732063616e6e6f7420626520746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f6136bd602a83612aeb565b91506136c882613663565b604082019050919050565b5f6020820190508181035f8301526136ea816136b1565b905091905056fea2646970667358221220d64c3ca9a4b0a45f0fc18669fc25f0bce086aede0b81542addd3a6af7a08315e64736f6c634300081a0033000000000000000000000000f2f3f13c36cd355162bee7c5416b227bf1c2ea5c00000000000000000000000041e94eb019c0762f9bfcf9fb1e58725bfb0e7582000000000000000000000000c6ec4c136e1b703b512ab9e618c16bce0ade6e1f00000000000000000000000048ea93ee4ff79bcce024fccd8b5ea2bb92b584dc000000000000000000000000afa76384d13f344fe902c1216f6fa4d09ab9038e000000000000000000000000f1174883d7aaaf825f387bf6ffe7d8041e526415000000000000000000000000d76dfccbddbb6de6d21264e5afb995b21e1dab25000000000000000000000000f5cea7987fd1e4580eaaac5cc5b8fa2f99f7458f0000000000000000000000002ab7fd40081f71e9530ec765cc6e0fa9cb5f3084