60806040526000600455633b9aca0060055560046006553480156200002357600080fd5b506200004462000038620000f660201b60201c565b620000fe60201b60201c565b6200008662000058620000f660201b60201c565b601260ff16600a6200006b919062000595565b6005546200007a9190620005e6565b620001c260201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620000e8919062000642565b60405180910390a3620007b5565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000234576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022b90620006c0565b60405180910390fd5b620002476000836200033a60201b60201c565b80600460008282546200025b9190620006e2565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002b39190620006e2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031a919062000642565b60405180910390a36200033660008383620003ad60201b60201c565b5050565b6200034b82620003b260201b60201c565b1580156200036757506200036581620003b260201b60201c565b155b620003a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a09062000793565b60405180910390fd5b5050565b505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000496578086048111156200046e576200046d62000408565b5b60018516156200047e5780820291505b80810290506200048e8562000437565b94506200044e565b94509492505050565b600082620004b1576001905062000584565b81620004c1576000905062000584565b8160018114620004da5760028114620004e5576200051b565b600191505062000584565b60ff841115620004fa57620004f962000408565b5b8360020a91508482111562000514576200051362000408565b5b5062000584565b5060208310610133831016604e8410600b8410161715620005555782820a9050838111156200054f576200054e62000408565b5b62000584565b62000564848484600162000444565b925090508184048111156200057e576200057d62000408565b5b81810290505b9392505050565b6000819050919050565b6000620005a2826200058b565b9150620005af836200058b565b9250620005de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200049f565b905092915050565b6000620005f3826200058b565b915062000600836200058b565b925082820262000610816200058b565b915082820484148315176200062a576200062962000408565b5b5092915050565b6200063c816200058b565b82525050565b600060208201905062000659600083018462000631565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620006a8601f836200065f565b9150620006b58262000670565b602082019050919050565b60006020820190508181036000830152620006db8162000699565b9050919050565b6000620006ef826200058b565b9150620006fc836200058b565b925082820190508082111562000717576200071662000408565b5b92915050565b7f5472616e736665722066726f6d206f7220746f20626c61636b6c69737465642060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b60006200077b6027836200065f565b915062000788826200071d565b604082019050919050565b60006020820190508181036000830152620007ae816200076c565b9050919050565b6120e080620007c56000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b8578063a9059cbb1161007c578063a9059cbb14610340578063ae06c1b714610370578063dd62ed3e1461038c578063f2fde38b146103bc578063fe575a87146103d8578063fee98cc61461040857610137565b8063715018a6146102ae57806388bb012a146102b85780638da5cb5b146102d457806395d89b41146102f2578063a457c2d71461031057610137565b806339509351116100ff57806339509351146101f657806342966c6814610226578063659419a4146102425780636f302bb91461026057806370a082311461027e57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610424565b6040516101519190611616565b60405180910390f35b610174600480360381019061016f91906116d1565b610461565b604051610181919061172c565b60405180910390f35b61019261047f565b60405161019f9190611756565b60405180910390f35b6101c260048036038101906101bd9190611771565b610489565b6040516101cf919061172c565b60405180910390f35b6101e0610581565b6040516101ed91906117e0565b60405180910390f35b610210600480360381019061020b91906116d1565b61058a565b60405161021d919061172c565b60405180910390f35b610240600480360381019061023b91906117fb565b610636565b005b61024a61064a565b6040516102579190611837565b60405180910390f35b610268610662565b6040516102759190611756565b60405180910390f35b61029860048036038101906102939190611852565b610668565b6040516102a59190611756565b60405180910390f35b6102b66106b1565b005b6102d260048036038101906102cd9190611852565b610739565b005b6102dc610810565b6040516102e99190611837565b60405180910390f35b6102fa610839565b6040516103079190611616565b60405180910390f35b61032a600480360381019061032591906116d1565b610876565b604051610337919061172c565b60405180910390f35b61035a600480360381019061035591906116d1565b610961565b604051610367919061172c565b60405180910390f35b61038a600480360381019061038591906117fb565b61097f565b005b6103a660048036038101906103a1919061187f565b610a13565b6040516103b39190611756565b60405180910390f35b6103d660048036038101906103d19190611852565b610a9a565b005b6103f260048036038101906103ed9190611852565b610b91565b6040516103ff919061172c565b60405180910390f35b610422600480360381019061041d9190611852565b610be7565b005b60606040518060400160405280600d81526020017f444149434849204b414d41444100000000000000000000000000000000000000815250905090565b600061047561046e610cbe565b8484610cc6565b6001905092915050565b6000600454905090565b6000610496848484610e8f565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006104e1610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055890611931565b60405180910390fd5b6105758561056d610cbe565b858403610cc6565b60019150509392505050565b60006012905090565b600061062c610597610cbe565b8484600260006105a5610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106279190611980565b610cc6565b6001905092915050565b610647610641610cbe565b82611264565b50565b73420948dcfb545c05b56a9ca8133c3a034e115a2181565b60065481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106b9610cbe565b73ffffffffffffffffffffffffffffffffffffffff166106d7610810565b73ffffffffffffffffffffffffffffffffffffffff161461072d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072490611a00565b60405180910390fd5b610737600061143b565b565b610741610cbe565b73ffffffffffffffffffffffffffffffffffffffff1661075f610810565b73ffffffffffffffffffffffffffffffffffffffff16146107b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ac90611a00565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4b414d4144410000000000000000000000000000000000000000000000000000815250905090565b60008060026000610885610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990611a92565b60405180910390fd5b61095661094d610cbe565b85858403610cc6565b600191505092915050565b600061097561096e610cbe565b8484610e8f565b6001905092915050565b610987610cbe565b73ffffffffffffffffffffffffffffffffffffffff166109a5610810565b73ffffffffffffffffffffffffffffffffffffffff16146109fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f290611a00565b60405180910390fd5b6064811115610a0957600080fd5b8060068190555050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610aa2610cbe565b73ffffffffffffffffffffffffffffffffffffffff16610ac0610810565b73ffffffffffffffffffffffffffffffffffffffff1614610b16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0d90611a00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c90611b24565b60405180910390fd5b610b8e8161143b565b50565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bef610cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c0d610810565b73ffffffffffffffffffffffffffffffffffffffff1614610c63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5a90611a00565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90611bb6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90611c48565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e829190611756565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef590611cda565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6490611d6c565b60405180910390fd5b610f7783836114ff565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff590611dfe565b60405180910390fd5b60006110098361155e565b90506000839050611018610810565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156110865750611056610810565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156111505781816110979190611e1e565b9050816001600073420948dcfb545c05b56a9ca8133c3a034e115a2173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110f89190611980565b6001600073420948dcfb545c05b56a9ca8133c3a034e115a2173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b838303600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111e59190611980565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516112499190611756565b60405180910390a361125c868686611581565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca90611ec4565b60405180910390fd5b6112de8260006114ff565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90611f56565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546113bd9190611e1e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114229190611756565b60405180910390a361143683600084611581565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61150882610b91565b15801561151b575061151981610b91565b155b61155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190611fe8565b60405180910390fd5b5050565b60006064600654836115709190612008565b61157a9190612079565b9050919050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115c05780820151818401526020810190506115a5565b60008484015250505050565b6000601f19601f8301169050919050565b60006115e882611586565b6115f28185611591565b93506116028185602086016115a2565b61160b816115cc565b840191505092915050565b6000602082019050818103600083015261163081846115dd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116688261163d565b9050919050565b6116788161165d565b811461168357600080fd5b50565b6000813590506116958161166f565b92915050565b6000819050919050565b6116ae8161169b565b81146116b957600080fd5b50565b6000813590506116cb816116a5565b92915050565b600080604083850312156116e8576116e7611638565b5b60006116f685828601611686565b9250506020611707858286016116bc565b9150509250929050565b60008115159050919050565b61172681611711565b82525050565b6000602082019050611741600083018461171d565b92915050565b6117508161169b565b82525050565b600060208201905061176b6000830184611747565b92915050565b60008060006060848603121561178a57611789611638565b5b600061179886828701611686565b93505060206117a986828701611686565b92505060406117ba868287016116bc565b9150509250925092565b600060ff82169050919050565b6117da816117c4565b82525050565b60006020820190506117f560008301846117d1565b92915050565b60006020828403121561181157611810611638565b5b600061181f848285016116bc565b91505092915050565b6118318161165d565b82525050565b600060208201905061184c6000830184611828565b92915050565b60006020828403121561186857611867611638565b5b600061187684828501611686565b91505092915050565b6000806040838503121561189657611895611638565b5b60006118a485828601611686565b92505060206118b585828601611686565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061191b602883611591565b9150611926826118bf565b604082019050919050565b6000602082019050818103600083015261194a8161190e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061198b8261169b565b91506119968361169b565b92508282019050808211156119ae576119ad611951565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006119ea602083611591565b91506119f5826119b4565b602082019050919050565b60006020820190508181036000830152611a19816119dd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611a7c602583611591565b9150611a8782611a20565b604082019050919050565b60006020820190508181036000830152611aab81611a6f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611b0e602683611591565b9150611b1982611ab2565b604082019050919050565b60006020820190508181036000830152611b3d81611b01565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611ba0602483611591565b9150611bab82611b44565b604082019050919050565b60006020820190508181036000830152611bcf81611b93565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c32602283611591565b9150611c3d82611bd6565b604082019050919050565b60006020820190508181036000830152611c6181611c25565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611cc4602583611591565b9150611ccf82611c68565b604082019050919050565b60006020820190508181036000830152611cf381611cb7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611d56602383611591565b9150611d6182611cfa565b604082019050919050565b60006020820190508181036000830152611d8581611d49565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611de8602683611591565b9150611df382611d8c565b604082019050919050565b60006020820190508181036000830152611e1781611ddb565b9050919050565b6000611e298261169b565b9150611e348361169b565b9250828203905081811115611e4c57611e4b611951565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611eae602183611591565b9150611eb982611e52565b604082019050919050565b60006020820190508181036000830152611edd81611ea1565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f40602283611591565b9150611f4b82611ee4565b604082019050919050565b60006020820190508181036000830152611f6f81611f33565b9050919050565b7f5472616e736665722066726f6d206f7220746f20626c61636b6c69737465642060008201527f6164647265737300000000000000000000000000000000000000000000000000602082015250565b6000611fd2602783611591565b9150611fdd82611f76565b604082019050919050565b6000602082019050818103600083015261200181611fc5565b9050919050565b60006120138261169b565b915061201e8361169b565b925082820261202c8161169b565b9150828204841483151761204357612042611951565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006120848261169b565b915061208f8361169b565b92508261209f5761209e61204a565b5b82820490509291505056fea2646970667358221220cfe0b8fe297babb3e30396dcec53e8e760e6292b06af1ea224c86e75e085033664736f6c63430008110033