60806040523480156200001157600080fd5b50604051620027ab380380620027ab8339818101604052810190620000379190620004a5565b620000576200004b6200016d60201b60201c565b6200017560201b60201c565b6040518060400160405280600681526020017f4e616d616461000000000000000000000000000000000000000000000000000081525060049080519060200190620000a49291906200038b565b506040518060400160405280600381526020017f4e414d000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000f29291906200038b565b5062000125816012600a62000108919062000671565b633b9aca00620001199190620006c2565b6200023960201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000896565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a39062000784565b60405180910390fd5b8060036000828254620002c09190620007a6565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003189190620007a6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200037f919062000814565b60405180910390a35050565b828054620003999062000860565b90600052602060002090601f016020900481019282620003bd576000855562000409565b82601f10620003d857805160ff191683800117855562000409565b8280016001018555821562000409579182015b8281111562000408578251825591602001919060010190620003eb565b5b5090506200041891906200041c565b5090565b5b80821115620004375760008160009055506001016200041d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200046d8262000440565b9050919050565b6200047f8162000460565b81146200048b57600080fd5b50565b6000815190506200049f8162000474565b92915050565b600060208284031215620004be57620004bd6200043b565b5b6000620004ce848285016200048e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000565578086048111156200053d576200053c620004d7565b5b60018516156200054d5780820291505b80810290506200055d8562000506565b94506200051d565b94509492505050565b60008262000580576001905062000653565b8162000590576000905062000653565b8160018114620005a95760028114620005b457620005ea565b600191505062000653565b60ff841115620005c957620005c8620004d7565b5b8360020a915084821115620005e357620005e2620004d7565b5b5062000653565b5060208310610133831016604e8410600b8410161715620006245782820a9050838111156200061e576200061d620004d7565b5b62000653565b62000633848484600162000513565b925090508184048111156200064d576200064c620004d7565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200067e826200065a565b91506200068b8362000664565b9250620006ba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200056e565b905092915050565b6000620006cf826200065a565b9150620006dc836200065a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620007185762000717620004d7565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200076c601f8362000723565b9150620007798262000734565b602082019050919050565b600060208201905081810360008301526200079f816200075d565b9050919050565b6000620007b3826200065a565b9150620007c0836200065a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620007f857620007f7620004d7565b5b828201905092915050565b6200080e816200065a565b82525050565b60006020820190506200082b600083018462000803565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200087957607f821691505b6020821081141562000890576200088f62000831565b5b50919050565b611f0580620008a66000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063a457c2d711610071578063a457c2d7146102aa578063a9059cbb146102da578063dd62ed3e1461030a578063fb86a4041461033a578063fc7bd038146103585761010b565b806370a0823114610234578063880ad0af146102645780638da5cb5b1461026e57806395d89b411461028c5761010b565b8063313ce567116100de578063313ce567146101ac57806339509351146101ca5780634a8d1348146101fa578063671f3db8146102185761010b565b806306fdde0314610110578063095ea7b31461012e57806318160ddd1461015e57806323b872dd1461017c575b600080fd5b610118610374565b604051610125919061123e565b60405180910390f35b61014860048036038101906101439190611308565b610406565b6040516101559190611363565b60405180910390f35b610166610424565b604051610173919061138d565b60405180910390f35b610196600480360381019061019191906113a8565b61042e565b6040516101a39190611363565b60405180910390f35b6101b4610526565b6040516101c19190611417565b60405180910390f35b6101e460048036038101906101df9190611308565b61052f565b6040516101f19190611363565b60405180910390f35b6102026105db565b60405161020f9190611441565b60405180910390f35b610232600480360381019061022d919061145c565b610605565b005b61024e60048036038101906102499190611489565b610798565b60405161025b919061138d565b60405180910390f35b61026c6107e1565b005b61027661091d565b6040516102839190611441565b60405180910390f35b610294610946565b6040516102a1919061123e565b60405180910390f35b6102c460048036038101906102bf9190611308565b6109d8565b6040516102d19190611363565b60405180910390f35b6102f460048036038101906102ef9190611308565b610ac3565b6040516103019190611363565b60405180910390f35b610324600480360381019061031f91906114b6565b610ae1565b604051610331919061138d565b60405180910390f35b610342610b68565b60405161034f919061138d565b60405180910390f35b610372600480360381019061036d919061163e565b610b88565b005b606060048054610383906116c9565b80601f01602080910402602001604051908101604052809291908181526020018280546103af906116c9565b80156103fc5780601f106103d1576101008083540402835291602001916103fc565b820191906000526020600020905b8154815290600101906020018083116103df57829003601f168201915b5050505050905090565b600061041a610413610d21565b8484610d29565b6001905092915050565b6000600354905090565b600061043b848484610ef4565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610486610d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fd9061176d565b60405180910390fd5b61051a85610512610d21565b858403610d29565b60019150509392505050565b60006012905090565b60006105d161053c610d21565b84846002600061054a610d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105cc91906117bc565b610d29565b6001905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61060d610d21565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156107945760006012600a6106729190611945565b629896806106809190611990565b90506000612710826106929190611990565b90506000600180600180856106a79190611990565b6106b19190611990565b6106bb9190611990565b6106c59190611990565b905083816106d39190611990565b905080600160006106e2610d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461072b91906117bc565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461078c57600080fd5b505050610795565b5b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107e9610d21565b73ffffffffffffffffffffffffffffffffffffffff1661080761091d565b73ffffffffffffffffffffffffffffffffffffffff161461085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085490611a36565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610955906116c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610981906116c9565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b5050505050905090565b600080600260006109e7610d21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9b90611ac8565b60405180910390fd5b610ab8610aaf610d21565b85858403610d29565b600191505092915050565b6000610ad7610ad0610d21565b8484610ef4565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6012600a610b769190611945565b633b9aca00610b859190611990565b81565b610b90610d21565b73ffffffffffffffffffffffffffffffffffffffff16610bae61091d565b73ffffffffffffffffffffffffffffffffffffffff1614610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90611a36565b60405180910390fd5b60005b8251811015610d1c576000838281518110610c2557610c24611ae8565b5b602002602001015190506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167fd551363168ce4784e28e5d59fc07cbea2191657416e05f6e8cd8f1086eb91e6d8286604051610cff929190611b17565b60405180910390a250508080610d1490611b40565b915050610c07565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090611bfb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090611c8d565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ee7919061138d565b60405180910390a3505050565b60008111610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90611cf9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e90611d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e90611e1d565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590611eaf565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461113391906117bc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611197919061138d565b60405180910390a350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156111df5780820151818401526020810190506111c4565b838111156111ee576000848401525b50505050565b6000601f19601f8301169050919050565b6000611210826111a5565b61121a81856111b0565b935061122a8185602086016111c1565b611233816111f4565b840191505092915050565b600060208201905081810360008301526112588184611205565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061129f82611274565b9050919050565b6112af81611294565b81146112ba57600080fd5b50565b6000813590506112cc816112a6565b92915050565b6000819050919050565b6112e5816112d2565b81146112f057600080fd5b50565b600081359050611302816112dc565b92915050565b6000806040838503121561131f5761131e61126a565b5b600061132d858286016112bd565b925050602061133e858286016112f3565b9150509250929050565b60008115159050919050565b61135d81611348565b82525050565b60006020820190506113786000830184611354565b92915050565b611387816112d2565b82525050565b60006020820190506113a2600083018461137e565b92915050565b6000806000606084860312156113c1576113c061126a565b5b60006113cf868287016112bd565b93505060206113e0868287016112bd565b92505060406113f1868287016112f3565b9150509250925092565b600060ff82169050919050565b611411816113fb565b82525050565b600060208201905061142c6000830184611408565b92915050565b61143b81611294565b82525050565b60006020820190506114566000830184611432565b92915050565b6000602082840312156114725761147161126a565b5b6000611480848285016112f3565b91505092915050565b60006020828403121561149f5761149e61126a565b5b60006114ad848285016112bd565b91505092915050565b600080604083850312156114cd576114cc61126a565b5b60006114db858286016112bd565b92505060206114ec858286016112bd565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611533826111f4565b810181811067ffffffffffffffff82111715611552576115516114fb565b5b80604052505050565b6000611565611260565b9050611571828261152a565b919050565b600067ffffffffffffffff821115611591576115906114fb565b5b602082029050602081019050919050565b600080fd5b60006115ba6115b584611576565b61155b565b905080838252602082019050602084028301858111156115dd576115dc6115a2565b5b835b8181101561160657806115f288826112bd565b8452602084019350506020810190506115df565b5050509392505050565b600082601f830112611625576116246114f6565b5b81356116358482602086016115a7565b91505092915050565b600080604083850312156116555761165461126a565b5b600083013567ffffffffffffffff8111156116735761167261126f565b5b61167f85828601611610565b9250506020611690858286016112f3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806116e157607f821691505b602082108114156116f5576116f461169a565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006117576028836111b0565b9150611762826116fb565b604082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117c7826112d2565b91506117d2836112d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118075761180661178d565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b6001851115611869578086048111156118455761184461178d565b5b60018516156118545780820291505b808102905061186285611812565b9450611829565b94509492505050565b600082611882576001905061193e565b81611890576000905061193e565b81600181146118a657600281146118b0576118df565b600191505061193e565b60ff8411156118c2576118c161178d565b5b8360020a9150848211156118d9576118d861178d565b5b5061193e565b5060208310610133831016604e8410600b84101617156119145782820a90508381111561190f5761190e61178d565b5b61193e565b611921848484600161181f565b925090508184048111156119385761193761178d565b5b81810290505b9392505050565b6000611950826112d2565b915061195b836113fb565b92506119887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611872565b905092915050565b600061199b826112d2565b91506119a6836112d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156119df576119de61178d565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611a206020836111b0565b9150611a2b826119ea565b602082019050919050565b60006020820190508181036000830152611a4f81611a13565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611ab26025836111b0565b9150611abd82611a56565b604082019050919050565b60006020820190508181036000830152611ae181611aa5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082019050611b2c600083018561137e565b611b39602083018461137e565b9392505050565b6000611b4b826112d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b7e57611b7d61178d565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611be56024836111b0565b9150611bf082611b89565b604082019050919050565b60006020820190508181036000830152611c1481611bd8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c776022836111b0565b9150611c8282611c1b565b604082019050919050565b60006020820190508181036000830152611ca681611c6a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74207a65726f0000000000600082015250565b6000611ce3601b836111b0565b9150611cee82611cad565b602082019050919050565b60006020820190508181036000830152611d1281611cd6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d756025836111b0565b9150611d8082611d19565b604082019050919050565b60006020820190508181036000830152611da481611d68565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611e076023836111b0565b9150611e1282611dab565b604082019050919050565b60006020820190508181036000830152611e3681611dfa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611e996026836111b0565b9150611ea482611e3d565b604082019050919050565b60006020820190508181036000830152611ec881611e8c565b905091905056fea2646970667358221220cfca3894896190cc84fa00b19e1c2c4b258857738a88a75d0c6bfb57da8d15c164736f6c634300080800330000000000000000000000004352bd7eae70566fae91edb1d578b686f8a2679c