0x60806040523480156200001157600080fd5b50604051620026be380380620026be833981810160405281019062000037919062000330565b601260ff16600a6200004a9190620004e5565b8162000057919062000536565b600081905550600054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60005460405162000105919062000592565b60405180910390a3600573ecf6ded482edb013258c7f314a4251813ab1d24a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573ecf6ded482edb013258c7f314a4251813ab1d24a9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600573f33f6f169a37646b80fdac2ae3a305b95842d6a19080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060057358f3ef8bf09cbf9368280f1deaebaf29daa24d149080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620005af565b600080fd5b6000819050919050565b6200030a81620002f5565b81146200031657600080fd5b50565b6000815190506200032a81620002ff565b92915050565b600060208284031215620003495762000348620002f0565b5b6000620003598482850162000319565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620003f057808604811115620003c857620003c762000362565b5b6001851615620003d85780820291505b8081029050620003e88562000391565b9450620003a8565b94509492505050565b6000826200040b5760019050620004de565b816200041b5760009050620004de565b81600181146200043457600281146200043f5762000475565b6001915050620004de565b60ff84111562000454576200045362000362565b5b8360020a9150848211156200046e576200046d62000362565b5b50620004de565b5060208310610133831016604e8410600b8410161715620004af5782820a905083811115620004a957620004a862000362565b5b620004de565b620004be84848460016200039e565b92509050818404811115620004d857620004d762000362565b5b81810290505b9392505050565b6000620004f282620002f5565b9150620004ff83620002f5565b92506200052e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620003f9565b905092915050565b60006200054382620002f5565b91506200055083620002f5565b92508282026200056081620002f5565b915082820484148315176200057a576200057962000362565b5b5092915050565b6200058c81620002f5565b82525050565b6000602082019050620005a9600083018462000581565b92915050565b6120ff80620005bf6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806389158d8e1161008c578063a457c2d711610066578063a457c2d71461025f578063a9059cbb1461028f578063dd62ed3e146102bf578063f968f493146102ef576100ea565b806389158d8e1461020957806395d89b41146102255780639b2da62214610243576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806370a08231146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102f9565b6040516101049190611759565b60405180910390f35b61012760048036038101906101229190611819565b610336565b6040516101349190611874565b60405180910390f35b61014561034d565b604051610152919061189e565b60405180910390f35b610175600480360381019061017091906118b9565b610356565b6040516101829190611874565b60405180910390f35b610193610507565b6040516101a09190611928565b60405180910390f35b6101c360048036038101906101be9190611819565b610510565b6040516101d09190611874565b60405180910390f35b6101f360048036038101906101ee9190611943565b6105ae565b604051610200919061189e565b60405180910390f35b610223600480360381019061021e9190611970565b6105f7565b005b61022d6107e1565b60405161023a9190611759565b60405180910390f35b61025d60048036038101906102589190611a15565b61081e565b005b61027960048036038101906102749190611819565b610955565b6040516102869190611874565b60405180910390f35b6102a960048036038101906102a49190611819565b6109f3565b6040516102b69190611874565b60405180910390f35b6102d960048036038101906102d49190611a62565b610b11565b6040516102e6919061189e565b60405180910390f35b6102f7610b98565b005b60606040518060400160405280600c81526020017f46696e616c46616e746173790000000000000000000000000000000000000000815250905090565b6000610343338484610ca4565b6001905092915050565b60008054905090565b600061036184610e6d565b8211156103a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039a90611aee565b60405180910390fd5b60006103e86005846103b59190611b3d565b6103bf9190611bae565b9050600081846103cf9190611bdf565b90506103dc868683610f8e565b6103fb8673d88fa142b67f561c5f2cbf803bf5ae906a8f1e4184610f8e565b60005b60058054905081101561046757610454876005838154811061042357610422611c13565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685610f8e565b808061045f90611c42565b9150506103fe565b506104fa863386600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546104f59190611bdf565b610ca4565b6001925050509392505050565b60006012905090565b60006105a4338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461059f9190611c8a565b610ca4565b6001905092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61060033610e6d565b821115610642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063990611aee565b60405180910390fd5b600082905082600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106d29190611bdf565b036106e7576001836106e49190611bdf565b90505b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107369190611c8a565b9250508190555081426107499190611c8a565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fd741e738a23fd18a03a26522320d9fc6cac1fed483e215ea9150fbc2fc43385d84846040516107d4929190611cbe565b60405180910390a2505050565b60606040518060400160405280600281526020017f4646000000000000000000000000000000000000000000000000000000000000815250905090565b60006108a383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506040518060400160405280600181526020017f2c00000000000000000000000000000000000000000000000000000000000000815250611182565b905060005b815181101561094f5760006108d68383815181106108c9576108c8611c13565b5b60200260200101516112bf565b90506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050808061094790611c42565b9150506108a8565b50505050565b60006109e9338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109e49190611bdf565b610ca4565b6001905092915050565b60006109fe33610e6d565b821115610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790611aee565b60405180910390fd5b60006103e8600584610a529190611b3d565b610a5c9190611bae565b905060008184610a6c9190611bdf565b9050610a79338683610f8e565b610a983373d88fa142b67f561c5f2cbf803bf5ae906a8f1e4184610f8e565b60005b600580549050811015610b0457610af13360058381548110610ac057610abf611c13565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685610f8e565b8080610afc90611c42565b915050610a9b565b5060019250505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b42600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1190611d33565b60405180910390fd5b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff167fcf96a7404357442bbc147c389fc2942cb6eedcaf1aad90bb8eb4b67ce43d4fb260405160405180910390a2565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0a90611d9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7990611e0b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e60919061189e565b60405180910390a3505050565b600042600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610efc57600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610f89565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f869190611bdf565b90505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490611e77565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390611ee3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110bb9190611bdf565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111119190611c8a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611175919061189e565b60405180910390a3505050565b606060008390506000839050600061119a838361147c565b905060006001826111ab9190611c8a565b67ffffffffffffffff8111156111c4576111c3611f03565b5b6040519080825280602002602001820160405280156111f757816020015b60608152602001906001900390816111e25790505b50905060008060005b865181101561127f576112148787836114e7565b1561126c576000819050600061122b8c85846115cd565b90508086868151811061124157611240611c13565b5b6020026020010181905250848061125790611c42565b9550508751836112679190611c8a565b935050505b808061127790611c42565b915050611200565b50600061128e8a8389516115cd565b9050808484815181106112a4576112a3611c13565b5b60200260200101819052508397505050505050505092915050565b600080829050602a815114611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090611f7e565b60405180910390fd5b600080600290505b825181101561147157600083828151811061132f5761132e611c13565b5b602001015160f81c60f81b60f81c905060308160ff1610158015611357575060398160ff1611155b1561138a576030816113699190611f9e565b60ff166010846113799190611fd3565b6113839190612015565b925061145d565b60418160ff16101580156113a2575060468160ff1611155b156113d5576037816113b49190611f9e565b60ff166010846113c49190611fd3565b6113ce9190612015565b925061145c565b60618160ff16101580156113ed575060668160ff1611155b15611420576057816113ff9190611f9e565b60ff1660108461140f9190611fd3565b6114199190612015565b925061145b565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611452906120a9565b60405180910390fd5b5b5b50808061146990611c42565b915050611311565b508092505050919050565b6000806000905060005b84518110156114dc5761149a8585836114e7565b156114c95781806114aa90611c42565b925050600184516114bb9190611bdf565b816114c69190611c8a565b90505b80806114d490611c42565b915050611486565b508091505092915050565b600083518351836114f89190611c8a565b111561150757600090506115c6565b60005b83518110156115c05783818151811061152657611525611c13565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168582856115609190611c8a565b8151811061157157611570611c13565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146115ad5760009150506115c6565b80806115b890611c42565b91505061150a565b50600190505b9392505050565b60606000849050600084846115e29190611bdf565b67ffffffffffffffff8111156115fb576115fa611f03565b5b6040519080825280601f01601f19166020018201604052801561162d5781602001600182028036833780820191505090505b50905060008590505b848110156116bc5782818151811061165157611650611c13565b5b602001015160f81c60f81b8287836116699190611bdf565b8151811061167a57611679611c13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806116b490611c42565b915050611636565b5080925050509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117035780820151818401526020810190506116e8565b60008484015250505050565b6000601f19601f8301169050919050565b600061172b826116c9565b61173581856116d4565b93506117458185602086016116e5565b61174e8161170f565b840191505092915050565b600060208201905081810360008301526117738184611720565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117b082611785565b9050919050565b6117c0816117a5565b81146117cb57600080fd5b50565b6000813590506117dd816117b7565b92915050565b6000819050919050565b6117f6816117e3565b811461180157600080fd5b50565b600081359050611813816117ed565b92915050565b600080604083850312156118305761182f61177b565b5b600061183e858286016117ce565b925050602061184f85828601611804565b9150509250929050565b60008115159050919050565b61186e81611859565b82525050565b60006020820190506118896000830184611865565b92915050565b611898816117e3565b82525050565b60006020820190506118b3600083018461188f565b92915050565b6000806000606084860312156118d2576118d161177b565b5b60006118e0868287016117ce565b93505060206118f1868287016117ce565b925050604061190286828701611804565b9150509250925092565b600060ff82169050919050565b6119228161190c565b82525050565b600060208201905061193d6000830184611919565b92915050565b6000602082840312156119595761195861177b565b5b6000611967848285016117ce565b91505092915050565b600080604083850312156119875761198661177b565b5b600061199585828601611804565b92505060206119a685828601611804565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126119d5576119d46119b0565b5b8235905067ffffffffffffffff8111156119f2576119f16119b5565b5b602083019150836001820283011115611a0e57611a0d6119ba565b5b9250929050565b60008060208385031215611a2c57611a2b61177b565b5b600083013567ffffffffffffffff811115611a4a57611a49611780565b5b611a56858286016119bf565b92509250509250929050565b60008060408385031215611a7957611a7861177b565b5b6000611a87858286016117ce565b9250506020611a98858286016117ce565b9150509250929050565b7f496e73756666696369656e7420756e6c6f636b65642062616c616e6365000000600082015250565b6000611ad8601d836116d4565b9150611ae382611aa2565b602082019050919050565b60006020820190508181036000830152611b0781611acb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b48826117e3565b9150611b53836117e3565b9250828202611b61816117e3565b91508282048414831517611b7857611b77611b0e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bb9826117e3565b9150611bc4836117e3565b925082611bd457611bd3611b7f565b5b828204905092915050565b6000611bea826117e3565b9150611bf5836117e3565b9250828203905081811115611c0d57611c0c611b0e565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611c4d826117e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c7f57611c7e611b0e565b5b600182019050919050565b6000611c95826117e3565b9150611ca0836117e3565b9250828201905080821115611cb857611cb7611b0e565b5b92915050565b6000604082019050611cd3600083018561188f565b611ce0602083018461188f565b9392505050565b7f546f6b656e7320617265207374696c6c206c6f636b6564000000000000000000600082015250565b6000611d1d6017836116d4565b9150611d2882611ce7565b602082019050919050565b60006020820190508181036000830152611d4c81611d10565b9050919050565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b6000611d89601d836116d4565b9150611d9482611d53565b602082019050919050565b60006020820190508181036000830152611db881611d7c565b9050919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b6000611df5601b836116d4565b9150611e0082611dbf565b602082019050919050565b60006020820190508181036000830152611e2481611de8565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b6000611e61601e836116d4565b9150611e6c82611e2b565b602082019050919050565b60006020820190508181036000830152611e9081611e54565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b6000611ecd601c836116d4565b9150611ed882611e97565b602082019050919050565b60006020820190508181036000830152611efc81611ec0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f496e76616c69642061646472657373206c656e67746800000000000000000000600082015250565b6000611f686016836116d4565b9150611f7382611f32565b602082019050919050565b60006020820190508181036000830152611f9781611f5b565b9050919050565b6000611fa98261190c565b9150611fb48361190c565b9250828203905060ff811115611fcd57611fcc611b0e565b5b92915050565b6000611fde82611785565b9150611fe983611785565b9250828202611ff781611785565b9150828204841483151761200e5761200d611b0e565b5b5092915050565b600061202082611785565b915061202b83611785565b9250828201905073ffffffffffffffffffffffffffffffffffffffff81111561205757612056611b0e565b5b92915050565b7f496e76616c696420636861726163746572000000000000000000000000000000600082015250565b60006120936011836116d4565b915061209e8261205d565b602082019050919050565b600060208201905081810360008301526120c281612086565b905091905056fea2646970667358221220fc48e80d6fa8aea67d4e31dd300bef5047d021755cee7a0215739bba75a87a9c64736f6c63430008120033000000000000000000000000000000000000000000000000000000000143abd9