60806040526001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200004757600080fd5b50604051620051d4380380620051d483398181016040528101906200006d919062000672565b733cc6cdda760b79bafa08df41ecfa224f810dceb660018585620000a66200009a620002f860201b60201c565b6200030060201b60201c565b8160019081620000b7919062000982565b508060029081620000c9919062000982565b50505060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002c157801562000187576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b81526004016200014d92919062000aae565b600060405180830381600087803b1580156200016857600080fd5b505af11580156200017d573d6000803e3d6000fd5b50505050620002c0565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000241576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200020792919062000aae565b600060405180830381600087803b1580156200022257600080fd5b505af115801562000237573d6000803e3d6000fd5b50505050620002bf565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b81526004016200028a919062000adb565b600060405180830381600087803b158015620002a557600080fd5b505af1158015620002ba573d6000803e3d6000fd5b505050505b5b5b505081600c819055508060079081620002db919062000982565b50620002ee8484620003c460201b60201c565b5050505062000b7b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003d4620002f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003fa6200047b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000453576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044a9062000b59565b60405180910390fd5b816008908162000464919062000982565b50806009908162000476919062000982565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200050d82620004c2565b810181811067ffffffffffffffff821117156200052f576200052e620004d3565b5b80604052505050565b600062000544620004a4565b905062000552828262000502565b919050565b600067ffffffffffffffff821115620005755762000574620004d3565b5b6200058082620004c2565b9050602081019050919050565b60005b83811015620005ad57808201518184015260208101905062000590565b60008484015250505050565b6000620005d0620005ca8462000557565b62000538565b905082815260208101848484011115620005ef57620005ee620004bd565b5b620005fc8482856200058d565b509392505050565b600082601f8301126200061c576200061b620004b8565b5b81516200062e848260208601620005b9565b91505092915050565b6000819050919050565b6200064c8162000637565b81146200065857600080fd5b50565b6000815190506200066c8162000641565b92915050565b600080600080608085870312156200068f576200068e620004ae565b5b600085015167ffffffffffffffff811115620006b057620006af620004b3565b5b620006be8782880162000604565b945050602085015167ffffffffffffffff811115620006e257620006e1620004b3565b5b620006f08782880162000604565b935050604062000703878288016200065b565b925050606085015167ffffffffffffffff811115620007275762000726620004b3565b5b620007358782880162000604565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200079457607f821691505b602082108103620007aa57620007a96200074c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620007d5565b620008208683620007d5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008636200085d620008578462000637565b62000838565b62000637565b9050919050565b6000819050919050565b6200087f8362000842565b620008976200088e826200086a565b848454620007e2565b825550505050565b600090565b620008ae6200089f565b620008bb81848462000874565b505050565b5b81811015620008e357620008d7600082620008a4565b600181019050620008c1565b5050565b601f8211156200093257620008fc81620007b0565b6200090784620007c5565b8101602085101562000917578190505b6200092f6200092685620007c5565b830182620008c0565b50505b505050565b600082821c905092915050565b6000620009576000198460080262000937565b1980831691505092915050565b600062000972838362000944565b9150826002028217905092915050565b6200098d8262000741565b67ffffffffffffffff811115620009a957620009a8620004d3565b5b620009b582546200077b565b620009c2828285620008e7565b600060209050601f831160018114620009fa5760008415620009e5578287015190505b620009f1858262000964565b86555062000a61565b601f19841662000a0a86620007b0565b60005b8281101562000a345784890151825560018201915060208501945060208101905062000a0d565b8683101562000a54578489015162000a50601f89168262000944565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a968262000a69565b9050919050565b62000aa88162000a89565b82525050565b600060408201905062000ac5600083018562000a9d565b62000ad4602083018462000a9d565b9392505050565b600060208201905062000af2600083018462000a9d565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b4160208362000af8565b915062000b4e8262000b09565b602082019050919050565b6000602082019050818103600083015262000b748162000b32565b9050919050565b6146498062000b8b6000396000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c806370a0823111610125578063c87b56dd116100ad578063f2fde38b1161007c578063f2fde38b14610600578063f4e8b4501461061c578063f56408ed14610638578063f88b2f4d14610654578063fe5285241461067057610211565b8063c87b56dd14610566578063d1f2299d14610596578063d5abeb01146105b2578063e985e9c5146105d057610211565b80638da5cb5b116100f45780638da5cb5b146104d657806395d89b41146104f4578063a22cb46514610512578063b3ab15fb1461052e578063b88d4fde1461054a57610211565b806370a0823114610462578063715018a614610492578063746e60b51461049c57806374b68205146104ba57610211565b8063342de179116101a857806342842e0e1161017757806342842e0e146103c057806355f804b3146103dc5780635a446215146103f85780636352211e146104145780636c0360eb1461044457610211565b8063342de1791461033a5780633aaea6e21461036a57806340c10f191461038657806341f43434146103a257610211565b8063081812fc116101e4578063081812fc146102b4578063095ea7b3146102e457806318160ddd1461030057806323b872dd1461031e57610211565b806301ffc9a71461021657806302d236d714610246578063032d7c8e1461026457806306fdde0314610296575b600080fd5b610230600480360381019061022b9190612ccd565b61068c565b60405161023d9190612d15565b60405180910390f35b61024e61076e565b60405161025b9190612d15565b60405180910390f35b61027e60048036038101906102799190612d66565b610781565b60405161028d93929190612da2565b60405180910390f35b61029e6107e1565b6040516102ab9190612e69565b60405180910390f35b6102ce60048036038101906102c99190612d66565b610873565b6040516102db9190612ecc565b60405180910390f35b6102fe60048036038101906102f99190612f13565b6108f8565b005b610308610911565b6040516103159190612f53565b60405180910390f35b61033860048036038101906103339190612f6e565b610917565b005b610354600480360381019061034f9190612d66565b610966565b6040516103619190612d15565b60405180910390f35b610384600480360381019061037f9190612d66565b610978565b005b6103a0600480360381019061039b9190612f13565b610b08565b005b6103aa610c07565b6040516103b79190613020565b60405180910390f35b6103da60048036038101906103d59190612f6e565b610c19565b005b6103f660048036038101906103f19190613170565b610c68565b005b610412600480360381019061040d91906131b9565b610cf7565b005b61042e60048036038101906104299190612d66565b610d97565b60405161043b9190612ecc565b60405180910390f35b61044c610e48565b6040516104599190612e69565b60405180910390f35b61047c60048036038101906104779190613231565b610ed6565b6040516104899190612f53565b60405180910390f35b61049a610f8d565b005b6104a4611015565b6040516104b19190612ecc565b60405180910390f35b6104d460048036038101906104cf919061328a565b61103b565b005b6104de6110d4565b6040516104eb9190612ecc565b60405180910390f35b6104fc6110fd565b6040516105099190612e69565b60405180910390f35b61052c600480360381019061052791906132b7565b61118f565b005b61054860048036038101906105439190613231565b6111a8565b005b610564600480360381019061055f9190613398565b61127f565b005b610580600480360381019061057b9190612d66565b6112d0565b60405161058d9190612e69565b60405180910390f35b6105b060048036038101906105ab919061347b565b611451565b005b6105ba61149d565b6040516105c79190612f53565b60405180910390f35b6105ea60048036038101906105e591906134c8565b6114a3565b6040516105f79190612d15565b60405180910390f35b61061a60048036038101906106159190613231565b611513565b005b61063660048036038101906106319190613170565b61160a565b005b610652600480360381019061064d9190613231565b611699565b005b61066e60048036038101906106699190613231565b611770565b005b61068a60048036038101906106859190612f6e565b611830565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061075757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107675750610766826118ec565b5b9050919050565b601160019054906101000a900460ff1681565b600080600080600f6000868152602001908152602001600020549050600081146107b8576001935080426107b59190613537565b92505b6010600086815260200190815260200160002054836107d7919061356b565b9150509193909250565b6060600880546107f0906135ce565b80601f016020809104026020016040519081016040528092919081815260200182805461081c906135ce565b80156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b5050505050905090565b600061087e82611956565b6108bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b490613671565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610902816119c2565b61090c8383611abf565b505050565b600d5481565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461095557610954336119c2565b5b610960848484611bd6565b50505050565b600061097182611956565b9050919050565b610980611c36565b73ffffffffffffffffffffffffffffffffffffffff1661099e6110d4565b73ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb906136dd565b60405180910390fd5b6000600f60008381526020019081526020016000205403610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190613749565b60405180910390fd5b600f60008281526020019081526020016000205442610a699190613537565b601060008381526020019081526020016000206000828254610a8b919061356b565b925050819055506000600f600083815260200190815260200160002081905550807f0594fec9b42ce38ee3c311c4bdd01add00de4138f3f35028275ed5ddcb0ccdf760405160405180910390a2807f2d9e02ad9cfe484dbfaf949b18b0276dbc35a5c692e7a09ccd58e8c71dd8661660405160405180910390a250565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f906137b5565b60405180910390fd5b6001600d6000828254610bab919061356b565b92505081905550600c54600d541115610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf090613821565b60405180910390fd5b610c038282611c3e565b5050565b6daaeb6d7670e522a718067333cd4e81565b823373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c5757610c56336119c2565b5b610c62848484611c5c565b50505050565b610c70611c36565b73ffffffffffffffffffffffffffffffffffffffff16610c8e6110d4565b73ffffffffffffffffffffffffffffffffffffffff1614610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906136dd565b60405180910390fd5b80600a9081610cf391906139e3565b5050565b610cff611c36565b73ffffffffffffffffffffffffffffffffffffffff16610d1d6110d4565b73ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a906136dd565b60405180910390fd5b8160089081610d8291906139e3565b508060099081610d9291906139e3565b505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3690613b27565b60405180910390fd5b80915050919050565b600a8054610e55906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610e81906135ce565b8015610ece5780601f10610ea357610100808354040283529160200191610ece565b820191906000526020600020905b815481529060010190602001808311610eb157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3d90613bb9565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f95611c36565b73ffffffffffffffffffffffffffffffffffffffff16610fb36110d4565b73ffffffffffffffffffffffffffffffffffffffff1614611009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611000906136dd565b60405180910390fd5b6110136000611c7c565b565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611043611c36565b73ffffffffffffffffffffffffffffffffffffffff166110616110d4565b73ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906136dd565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606009805461110c906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611138906135ce565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050905090565b81611199816119c2565b6111a38383611d40565b505050565b6111b0611c36565b73ffffffffffffffffffffffffffffffffffffffff166111ce6110d4565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b906136dd565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b833373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112bd576112bc336119c2565b5b6112c985858585611d56565b5050505050565b60606112db82611956565b61137157600780546112ec906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611318906135ce565b80156113655780601f1061133a57610100808354040283529160200191611365565b820191906000526020600020905b81548152906001019060200180831161134857829003601f168201915b5050505050905061144c565b6000600a8054611380906135ce565b9050116114175760078054611394906135ce565b80601f01602080910402602001604051908101604052809291908181526020018280546113c0906135ce565b801561140d5780601f106113e25761010080835404028352916020019161140d565b820191906000526020600020905b8154815290600101906020018083116113f057829003601f168201915b5050505050611449565b61141f611db8565b61142883611e4a565b604051602001611439929190613c15565b6040516020818303038152906040525b90505b919050565b600082829050905060005b818110156114975761148684848381811061147a57611479613c39565b5b90506020020135611faa565b8061149090613c68565b905061145c565b50505050565b600c5481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611500576001905061150d565b61150a83836121b2565b90505b92915050565b61151b611c36565b73ffffffffffffffffffffffffffffffffffffffff166115396110d4565b73ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611586906136dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f590613d22565b60405180910390fd5b61160781611c7c565b50565b611612611c36565b73ffffffffffffffffffffffffffffffffffffffff166116306110d4565b73ffffffffffffffffffffffffffffffffffffffff1614611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d906136dd565b60405180910390fd5b806007908161169591906139e3565b5050565b6116a1611c36565b73ffffffffffffffffffffffffffffffffffffffff166116bf6110d4565b73ffffffffffffffffffffffffffffffffffffffff1614611715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170c906136dd565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611778611c36565b73ffffffffffffffffffffffffffffffffffffffff166117966110d4565b73ffffffffffffffffffffffffffffffffffffffff16146117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e3906136dd565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1661185082610d97565b73ffffffffffffffffffffffffffffffffffffffff16146118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613d8e565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506118cc838383610c19565b6001601160006101000a81548160ff021916908315150217905550505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611abc576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401611a39929190613dae565b602060405180830381865afa158015611a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7a9190613dec565b611abb57806040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611ab29190612ecc565b60405180910390fd5b5b50565b6000611aca82610d97565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190613e8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611b59611c36565b73ffffffffffffffffffffffffffffffffffffffff161480611b885750611b8781611b82611c36565b6114a3565b5b611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe90613f1d565b60405180910390fd5b611bd18383612246565b505050565b611be7611be1611c36565b826122ff565b611c26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1d90613faf565b60405180910390fd5b611c318383836123dd565b505050565b600033905090565b611c58828260405180602001604052806000815250612643565b5050565b611c778383836040518060200160405280600081525061127f565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d52611d4b611c36565b838361269e565b5050565b611d67611d61611c36565b836122ff565b611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90613faf565b60405180910390fd5b611db28484848461280a565b50505050565b6060600a8054611dc7906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611df3906135ce565b8015611e405780601f10611e1557610100808354040283529160200191611e40565b820191906000526020600020905b815481529060010190602001808311611e2357829003601f168201915b5050505050905090565b606060008203611e91576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fa5565b600082905060005b60008214611ec3578080611eac90613c68565b915050600a82611ebc9190613ffe565b9150611e99565b60008167ffffffffffffffff811115611edf57611ede613045565b5b6040519080825280601f01601f191660200182016040528015611f115781602001600182028036833780820191505090505b5090505b60008514611f9e57600182611f2a9190613537565b9150600a85611f39919061402f565b6030611f45919061356b565b60f81b818381518110611f5b57611f5a613c39565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f979190613ffe565b9450611f15565b8093505050505b919050565b803373ffffffffffffffffffffffffffffffffffffffff16611fcb82610d97565b73ffffffffffffffffffffffffffffffffffffffff16148061202057503373ffffffffffffffffffffffffffffffffffffffff1661200882610873565b73ffffffffffffffffffffffffffffffffffffffff16145b80612039575061203861203282610d97565b336114a3565b5b612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f906140ac565b60405180910390fd5b6000600f60008481526020019081526020016000205490506000810361213157601160019054906101000a900460ff166120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90614118565b60405180910390fd5b42600f600085815260200190815260200160002081905550827fcc48e7d5fbe5d074357f80ec0befd4c6bbfc1cc8a6f51e728081aff87794d43b60405160405180910390a26121ad565b804261213d9190613537565b60106000858152602001908152602001600020600082825461215f919061356b565b925050819055506000600f600085815260200190815260200160002081905550827f0594fec9b42ce38ee3c311c4bdd01add00de4138f3f35028275ed5ddcb0ccdf760405160405180910390a25b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122b983610d97565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061230a82611956565b612349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612340906141aa565b60405180910390fd5b600061235483610d97565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612396575061239581856114a3565b5b806123d457508373ffffffffffffffffffffffffffffffffffffffff166123bc84610873565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123fd82610d97565b73ffffffffffffffffffffffffffffffffffffffff1614612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a9061423c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906142ce565b60405180910390fd5b6124cd838383612866565b6124d8600082612246565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125289190613537565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461257f919061356b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461263e8383836128d9565b505050565b61264d83836128de565b61265a6000848484612ab7565b612699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269090614360565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361270c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612703906143cc565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516127fd9190612d15565b60405180910390a3505050565b6128158484846123dd565b61282184848484612ab7565b612860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285790614360565b60405180910390fd5b50505050565b6000600f60008381526020019081526020016000205414806128955750601160009054906101000a900460ff16155b6128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614438565b60405180910390fd5b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361294d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612944906144a4565b60405180910390fd5b61295681611956565b15612996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298d90614510565b60405180910390fd5b6129a260008383612866565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f2919061356b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ab3600083836128d9565b5050565b6000612ad88473ffffffffffffffffffffffffffffffffffffffff16612c3e565b15612c31578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b01611c36565b8786866040518563ffffffff1660e01b8152600401612b239493929190614585565b6020604051808303816000875af1925050508015612b5f57506040513d601f19601f82011682018060405250810190612b5c91906145e6565b60015b612be1573d8060008114612b8f576040519150601f19603f3d011682016040523d82523d6000602084013e612b94565b606091505b506000815103612bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd090614360565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c36565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612caa81612c75565b8114612cb557600080fd5b50565b600081359050612cc781612ca1565b92915050565b600060208284031215612ce357612ce2612c6b565b5b6000612cf184828501612cb8565b91505092915050565b60008115159050919050565b612d0f81612cfa565b82525050565b6000602082019050612d2a6000830184612d06565b92915050565b6000819050919050565b612d4381612d30565b8114612d4e57600080fd5b50565b600081359050612d6081612d3a565b92915050565b600060208284031215612d7c57612d7b612c6b565b5b6000612d8a84828501612d51565b91505092915050565b612d9c81612d30565b82525050565b6000606082019050612db76000830186612d06565b612dc46020830185612d93565b612dd16040830184612d93565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e13578082015181840152602081019050612df8565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e3b82612dd9565b612e458185612de4565b9350612e55818560208601612df5565b612e5e81612e1f565b840191505092915050565b60006020820190508181036000830152612e838184612e30565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612eb682612e8b565b9050919050565b612ec681612eab565b82525050565b6000602082019050612ee16000830184612ebd565b92915050565b612ef081612eab565b8114612efb57600080fd5b50565b600081359050612f0d81612ee7565b92915050565b60008060408385031215612f2a57612f29612c6b565b5b6000612f3885828601612efe565b9250506020612f4985828601612d51565b9150509250929050565b6000602082019050612f686000830184612d93565b92915050565b600080600060608486031215612f8757612f86612c6b565b5b6000612f9586828701612efe565b9350506020612fa686828701612efe565b9250506040612fb786828701612d51565b9150509250925092565b6000819050919050565b6000612fe6612fe1612fdc84612e8b565b612fc1565b612e8b565b9050919050565b6000612ff882612fcb565b9050919050565b600061300a82612fed565b9050919050565b61301a81612fff565b82525050565b60006020820190506130356000830184613011565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61307d82612e1f565b810181811067ffffffffffffffff8211171561309c5761309b613045565b5b80604052505050565b60006130af612c61565b90506130bb8282613074565b919050565b600067ffffffffffffffff8211156130db576130da613045565b5b6130e482612e1f565b9050602081019050919050565b82818337600083830152505050565b600061311361310e846130c0565b6130a5565b90508281526020810184848401111561312f5761312e613040565b5b61313a8482856130f1565b509392505050565b600082601f8301126131575761315661303b565b5b8135613167848260208601613100565b91505092915050565b60006020828403121561318657613185612c6b565b5b600082013567ffffffffffffffff8111156131a4576131a3612c70565b5b6131b084828501613142565b91505092915050565b600080604083850312156131d0576131cf612c6b565b5b600083013567ffffffffffffffff8111156131ee576131ed612c70565b5b6131fa85828601613142565b925050602083013567ffffffffffffffff81111561321b5761321a612c70565b5b61322785828601613142565b9150509250929050565b60006020828403121561324757613246612c6b565b5b600061325584828501612efe565b91505092915050565b61326781612cfa565b811461327257600080fd5b50565b6000813590506132848161325e565b92915050565b6000602082840312156132a05761329f612c6b565b5b60006132ae84828501613275565b91505092915050565b600080604083850312156132ce576132cd612c6b565b5b60006132dc85828601612efe565b92505060206132ed85828601613275565b9150509250929050565b600067ffffffffffffffff82111561331257613311613045565b5b61331b82612e1f565b9050602081019050919050565b600061333b613336846132f7565b6130a5565b90508281526020810184848401111561335757613356613040565b5b6133628482856130f1565b509392505050565b600082601f83011261337f5761337e61303b565b5b813561338f848260208601613328565b91505092915050565b600080600080608085870312156133b2576133b1612c6b565b5b60006133c087828801612efe565b94505060206133d187828801612efe565b93505060406133e287828801612d51565b925050606085013567ffffffffffffffff81111561340357613402612c70565b5b61340f8782880161336a565b91505092959194509250565b600080fd5b600080fd5b60008083601f84011261343b5761343a61303b565b5b8235905067ffffffffffffffff8111156134585761345761341b565b5b60208301915083602082028301111561347457613473613420565b5b9250929050565b6000806020838503121561349257613491612c6b565b5b600083013567ffffffffffffffff8111156134b0576134af612c70565b5b6134bc85828601613425565b92509250509250929050565b600080604083850312156134df576134de612c6b565b5b60006134ed85828601612efe565b92505060206134fe85828601612efe565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061354282612d30565b915061354d83612d30565b925082820390508181111561356557613564613508565b5b92915050565b600061357682612d30565b915061358183612d30565b925082820190508082111561359957613598613508565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135e657607f821691505b6020821081036135f9576135f861359f565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061365b602c83612de4565b9150613666826135ff565b604082019050919050565b6000602082019050818103600083015261368a8161364e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136c7602083612de4565b91506136d282613691565b602082019050919050565b600060208201905081810360008301526136f6816136ba565b9050919050565b7f436f726e546f776e3a206e6f742073656564696e670000000000000000000000600082015250565b6000613733601583612de4565b915061373e826136fd565b602082019050919050565b6000602082019050818103600083015261376281613726565b9050919050565b7f6f6e6c792073616c65206d616e61676572000000000000000000000000000000600082015250565b600061379f601183612de4565b91506137aa82613769565b602082019050919050565b600060208201905081810360008301526137ce81613792565b9050919050565b7f6d6178537570706c790000000000000000000000000000000000000000000000600082015250565b600061380b600983612de4565b9150613816826137d5565b602082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613866565b6138ad8683613866565b95508019841693508086168417925050509392505050565b60006138e06138db6138d684612d30565b612fc1565b612d30565b9050919050565b6000819050919050565b6138fa836138c5565b61390e613906826138e7565b848454613873565b825550505050565b600090565b613923613916565b61392e8184846138f1565b505050565b5b818110156139525761394760008261391b565b600181019050613934565b5050565b601f8211156139975761396881613841565b61397184613856565b81016020851015613980578190505b61399461398c85613856565b830182613933565b50505b505050565b600082821c905092915050565b60006139ba6000198460080261399c565b1980831691505092915050565b60006139d383836139a9565b9150826002028217905092915050565b6139ec82612dd9565b67ffffffffffffffff811115613a0557613a04613045565b5b613a0f82546135ce565b613a1a828285613956565b600060209050601f831160018114613a4d5760008415613a3b578287015190505b613a4585826139c7565b865550613aad565b601f198416613a5b86613841565b60005b82811015613a8357848901518255600182019150602085019450602081019050613a5e565b86831015613aa05784890151613a9c601f8916826139a9565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613b11602983612de4565b9150613b1c82613ab5565b604082019050919050565b60006020820190508181036000830152613b4081613b04565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613ba3602a83612de4565b9150613bae82613b47565b604082019050919050565b60006020820190508181036000830152613bd281613b96565b9050919050565b600081905092915050565b6000613bef82612dd9565b613bf98185613bd9565b9350613c09818560208601612df5565b80840191505092915050565b6000613c218285613be4565b9150613c2d8284613be4565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613c7382612d30565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ca557613ca4613508565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d0c602683612de4565b9150613d1782613cb0565b604082019050919050565b60006020820190508181036000830152613d3b81613cff565b9050919050565b7f436f726e546f776e3a204f6e6c79206f776e6572000000000000000000000000600082015250565b6000613d78601483612de4565b9150613d8382613d42565b602082019050919050565b60006020820190508181036000830152613da781613d6b565b9050919050565b6000604082019050613dc36000830185612ebd565b613dd06020830184612ebd565b9392505050565b600081519050613de68161325e565b92915050565b600060208284031215613e0257613e01612c6b565b5b6000613e1084828501613dd7565b91505092915050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e75602183612de4565b9150613e8082613e19565b604082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613f07603883612de4565b9150613f1282613eab565b604082019050919050565b60006020820190508181036000830152613f3681613efa565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613f99603183612de4565b9150613fa482613f3d565b604082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061400982612d30565b915061401483612d30565b92508261402457614023613fcf565b5b828204905092915050565b600061403a82612d30565b915061404583612d30565b92508261405557614054613fcf565b5b828206905092915050565b7f436f726e546f776e3a204e6f7420617070726f766564206e6f72206f776e6572600082015250565b6000614096602083612de4565b91506140a182614060565b602082019050919050565b600060208201905081810360008301526140c581614089565b9050919050565b7f436f726e546f776e3a20776f726b20636c6f7365640000000000000000000000600082015250565b6000614102601583612de4565b915061410d826140cc565b602082019050919050565b60006020820190508181036000830152614131816140f5565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614194602c83612de4565b915061419f82614138565b604082019050919050565b600060208201905081810360008301526141c381614187565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614226602583612de4565b9150614231826141ca565b604082019050919050565b6000602082019050818103600083015261425581614219565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142b8602483612de4565b91506142c38261425c565b604082019050919050565b600060208201905081810360008301526142e7816142ab565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061434a603283612de4565b9150614355826142ee565b604082019050919050565b600060208201905081810360008301526143798161433d565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006143b6601983612de4565b91506143c182614380565b602082019050919050565b600060208201905081810360008301526143e5816143a9565b9050919050565b7f436f726e546f776e3a20776f726b696e67000000000000000000000000000000600082015250565b6000614422601183612de4565b915061442d826143ec565b602082019050919050565b6000602082019050818103600083015261445181614415565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061448e602083612de4565b915061449982614458565b602082019050919050565b600060208201905081810360008301526144bd81614481565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006144fa601c83612de4565b9150614505826144c4565b602082019050919050565b60006020820190508181036000830152614529816144ed565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061455782614530565b614561818561453b565b9350614571818560208601612df5565b61457a81612e1f565b840191505092915050565b600060808201905061459a6000830187612ebd565b6145a76020830186612ebd565b6145b46040830185612d93565b81810360608301526145c6818461454c565b905095945050505050565b6000815190506145e081612ca1565b92915050565b6000602082840312156145fc576145fb612c6b565b5b600061460a848285016145d1565b9150509291505056fea2646970667358221220fa04273fe0be194e086673f706ceee4595dad75602efa7eb250e828577e6078464736f6c63430008100033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000003a980000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000a546865204c6f63616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4f43414c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000