60806040523480156200001157600080fd5b5060405162001f0938038062001f09833981810160405281019062000037919062000290565b806040518060400160405280600981526020017f466c6173742045544800000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f66455448000000000000000000000000000000000000000000000000000000008152508160039081620000b591906200053c565b508060049081620000c791906200053c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000136919062000634565b60405180910390fd5b62000150816200016060201b60201c565b5060016006819055505062000651565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000258826200022b565b9050919050565b6200026a816200024b565b81146200027657600080fd5b50565b6000815190506200028a816200025f565b92915050565b600060208284031215620002a957620002a862000226565b5b6000620002b98482850162000279565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200034457607f821691505b6020821081036200035a5762000359620002fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000385565b620003d0868362000385565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200041d620004176200041184620003e8565b620003f2565b620003e8565b9050919050565b6000819050919050565b6200043983620003fc565b62000451620004488262000424565b84845462000392565b825550505050565b600090565b6200046862000459565b620004758184846200042e565b505050565b5b818110156200049d57620004916000826200045e565b6001810190506200047b565b5050565b601f821115620004ec57620004b68162000360565b620004c18462000375565b81016020851015620004d1578190505b620004e9620004e08562000375565b8301826200047a565b50505b505050565b600082821c905092915050565b60006200051160001984600802620004f1565b1980831691505092915050565b60006200052c8383620004fe565b9150826002028217905092915050565b6200054782620002c2565b67ffffffffffffffff811115620005635762000562620002cd565b5b6200056f82546200032b565b6200057c828285620004a1565b600060209050601f831160018114620005b457600084156200059f578287015190505b620005ab85826200051e565b8655506200061b565b601f198416620005c48662000360565b60005b82811015620005ee57848901518255600182019150602085019450602081019050620005c7565b868310156200060e57848901516200060a601f891682620004fe565b8355505b6001600288020188555050505b505050505050565b6200062e816200024b565b82525050565b60006020820190506200064b600083018462000623565b92915050565b6118a880620006616000396000f3fe6080604052600436106101095760003560e01c806370a08231116100955780638da5cb5b116100645780638da5cb5b1461033d57806395d89b4114610368578063a9059cbb14610393578063dd62ed3e146103d0578063f2fde38b1461040d57610109565b806370a0823114610295578063715018a6146102d257806379cc6790146102e9578063817b1cd21461031257610109565b80632e17de78116100dc5780632e17de78146101de578063313ce567146101fa5780633a4b66f1146102255780633b317dab1461022f57806342966c681461026c57610109565b806306fdde031461010e578063095ea7b31461013957806318160ddd1461017657806323b872dd146101a1575b600080fd5b34801561011a57600080fd5b50610123610436565b6040516101309190611354565b60405180910390f35b34801561014557600080fd5b50610160600480360381019061015b919061140f565b6104c8565b60405161016d919061146a565b60405180910390f35b34801561018257600080fd5b5061018b6104eb565b6040516101989190611494565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c391906114af565b6104f5565b6040516101d5919061146a565b60405180910390f35b6101f860048036038101906101f39190611502565b610524565b005b34801561020657600080fd5b5061020f61070f565b60405161021c919061154b565b60405180910390f35b61022d610718565b005b34801561023b57600080fd5b5061025660048036038101906102519190611566565b6107e2565b6040516102639190611494565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190611502565b6107fa565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190611566565b61080e565b6040516102c99190611494565b60405180910390f35b3480156102de57600080fd5b506102e7610856565b005b3480156102f557600080fd5b50610310600480360381019061030b919061140f565b61086a565b005b34801561031e57600080fd5b5061032761088a565b6040516103349190611494565b60405180910390f35b34801561034957600080fd5b50610352610890565b60405161035f91906115a2565b60405180910390f35b34801561037457600080fd5b5061037d6108ba565b60405161038a9190611354565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b5919061140f565b61094c565b6040516103c7919061146a565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f291906115bd565b61096f565b6040516104049190611494565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190611566565b6109f6565b005b6060600380546104459061162c565b80601f01602080910402602001604051908101604052809291908181526020018280546104719061162c565b80156104be5780601f10610493576101008083540402835291602001916104be565b820191906000526020600020905b8154815290600101906020018083116104a157829003601f168201915b5050505050905090565b6000806104d3610a7c565b90506104e0818585610a84565b600191505092915050565b6000600254905090565b600080610500610a7c565b905061050d858285610a96565b610518858585610b2a565b60019150509392505050565b61052c610c1e565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156105ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a5906116a9565b60405180910390fd5b6105b83382610c6d565b60003373ffffffffffffffffffffffffffffffffffffffff16826040516105de906116fa565b60006040518083038185875af1925050503d806000811461061b576040519150601f19603f3d011682016040523d82523d6000602084013e610620565b606091505b505090508061065b576040517fb12d13eb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106aa919061173e565b9250508190555081600860008282546106c3919061173e565b925050819055507fb24546d975e2628748efc9aced80665e0fad66272033e5c0ea25fd3afac9979533836040516106fb929190611772565b60405180910390a15061070c610cef565b50565b60006012905090565b610720610c1e565b600034905061072f3382610cf9565b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461077e919061179b565b925050819055508060086000828254610797919061179b565b925050819055507febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a33826040516107cf929190611772565b60405180910390a1506107e0610cef565b565b60076020528060005260406000206000915090505481565b61080b610805610a7c565b82610c6d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61085e610d7b565b6108686000610e02565b565b61087c82610876610a7c565b83610a96565b6108868282610c6d565b5050565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546108c99061162c565b80601f01602080910402602001604051908101604052809291908181526020018280546108f59061162c565b80156109425780601f1061091757610100808354040283529160200191610942565b820191906000526020600020905b81548152906001019060200180831161092557829003601f168201915b5050505050905090565b600080610957610a7c565b9050610964818585610b2a565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6109fe610d7b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a705760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a6791906115a2565b60405180910390fd5b610a7981610e02565b50565b600033905090565b610a918383836001610ec8565b505050565b6000610aa2848461096f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b245781811015610b14578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610b0b939291906117cf565b60405180910390fd5b610b2384848484036000610ec8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b9c5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610b9391906115a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c0e5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c0591906115a2565b60405180910390fd5b610c1983838361109f565b505050565b600260065403610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90611852565b60405180910390fd5b6002600681905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cdf5760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cd691906115a2565b60405180910390fd5b610ceb8260008361109f565b5050565b6001600681905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d6b5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d6291906115a2565b60405180910390fd5b610d776000838361109f565b5050565b610d83610a7c565b73ffffffffffffffffffffffffffffffffffffffff16610da1610890565b73ffffffffffffffffffffffffffffffffffffffff1614610e0057610dc4610a7c565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610df791906115a2565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f3a5760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610f3191906115a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fac5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610fa391906115a2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611099578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110909190611494565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f15780600260008282546110e5919061179b565b925050819055506111c4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561117d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611174939291906117cf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120d578060026000828254039250508190555061125a565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112b79190611494565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156112fe5780820151818401526020810190506112e3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611326826112c4565b61133081856112cf565b93506113408185602086016112e0565b6113498161130a565b840191505092915050565b6000602082019050818103600083015261136e818461131b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113a68261137b565b9050919050565b6113b68161139b565b81146113c157600080fd5b50565b6000813590506113d3816113ad565b92915050565b6000819050919050565b6113ec816113d9565b81146113f757600080fd5b50565b600081359050611409816113e3565b92915050565b6000806040838503121561142657611425611376565b5b6000611434858286016113c4565b9250506020611445858286016113fa565b9150509250929050565b60008115159050919050565b6114648161144f565b82525050565b600060208201905061147f600083018461145b565b92915050565b61148e816113d9565b82525050565b60006020820190506114a96000830184611485565b92915050565b6000806000606084860312156114c8576114c7611376565b5b60006114d6868287016113c4565b93505060206114e7868287016113c4565b92505060406114f8868287016113fa565b9150509250925092565b60006020828403121561151857611517611376565b5b6000611526848285016113fa565b91505092915050565b600060ff82169050919050565b6115458161152f565b82525050565b6000602082019050611560600083018461153c565b92915050565b60006020828403121561157c5761157b611376565b5b600061158a848285016113c4565b91505092915050565b61159c8161139b565b82525050565b60006020820190506115b76000830184611593565b92915050565b600080604083850312156115d4576115d3611376565b5b60006115e2858286016113c4565b92505060206115f3858286016113c4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061164457607f821691505b602082108103611657576116566115fd565b5b50919050565b7f696e73756666696369656e742066756e64000000000000000000000000000000600082015250565b60006116936011836112cf565b915061169e8261165d565b602082019050919050565b600060208201905081810360008301526116c281611686565b9050919050565b600081905092915050565b50565b60006116e46000836116c9565b91506116ef826116d4565b600082019050919050565b6000611705826116d7565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611749826113d9565b9150611754836113d9565b925082820390508181111561176c5761176b61170f565b5b92915050565b60006040820190506117876000830185611593565b6117946020830184611485565b9392505050565b60006117a6826113d9565b91506117b1836113d9565b92508282019050808211156117c9576117c861170f565b5b92915050565b60006060820190506117e46000830186611593565b6117f16020830185611485565b6117fe6040830184611485565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061183c601f836112cf565b915061184782611806565b602082019050919050565b6000602082019050818103600083015261186b8161182f565b905091905056fea26469706673582212202168ce44e6bb28f76596e419b1d51164e11395521d24e90e7afd5d32e970e22d64736f6c63430008180033000000000000000000000000206efa467b776793b97b9f0f22f3801c410e63fd