61016060405234801562000011575f80fd5b506040516200569838038062005698833981810160405281019062000037919062001279565b806040518060400160405280600881526020017f4178696f6d204149000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f4178696f6d2041490000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f417869414900000000000000000000000000000000000000000000000000000081525081600390816200012291906200150d565b5080600490816200013491906200150d565b5050506200014d600583620002b460201b90919060201c565b61012081815250506200016b600682620002b460201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001aa6200030960201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200025b575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000252919062001602565b60405180910390fd5b6200026c816200036560201b60201c565b50620002ad33620002826200042860201b60201c565b600a620002909190620017a6565b6305f5e100620002a19190620017f6565b6200043060201b60201c565b5062001caa565b5f602083511015620002d957620002d183620004ba60201b60201c565b905062000303565b82620002eb836200052460201b60201c565b5f019081620002fb91906200150d565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016200034a9594939291906200186b565b60405160208183030381529060405280519060200120905090565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004a3575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200049a919062001602565b60405180910390fd5b620004b65f83836200052d60201b60201c565b5050565b5f80829050601f815111156200050957826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040162000500919062001950565b60405180910390fd5b8051816200051790620019a1565b5f1c175f1b915050919050565b5f819050919050565b620005408383836200054560201b60201c565b505050565b620005588383836200061760201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620005ff575f6200059d6200083b60201b60201c565b90505f620005b06200084460201b60201c565b905080821115620005fc5781816040517f1cb15d26000000000000000000000000000000000000000000000000000000008152600401620005f392919062001a10565b60405180910390fd5b50505b620006128383836200086760201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200066b578060025f8282546200065e919062001a3b565b925050819055506200073c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620006f7578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620006ee9392919062001a75565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000785578060025f8282540392505081905550620007cf565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200082e919062001ab0565b60405180910390a3505050565b5f600254905090565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620008cd57620008ca600a6200096b60201b62000e7917620008be846200098260201b60201c565b620009f260201b60201c565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009335762000930600a62000a4160201b62000e8e1762000924846200098260201b60201c565b620009f260201b60201c565b50505b62000966620009488462000a5860201b60201c565b620009598462000a5860201b60201c565b8362000abd60201b60201c565b505050565b5f81836200097a919062001af0565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115620009ea5760d0826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401620009e192919062001b85565b60405180910390fd5b819050919050565b5f8062000a3562000a0862000d6760201b60201c565b62000a2462000a1d8862000d7d60201b60201c565b868860201c565b8762000deb60201b9092919060201c565b91509150935093915050565b5f818362000a50919062001bb0565b905092915050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000af957505f81115b1562000d62575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000c30575f8062000b9f60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2062000a4160201b62000e8e1762000b93866200098260201b60201c565b620009f260201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000c2592919062001a10565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000d61575f8062000cd060095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206200096b60201b62000e791762000cc4866200098260201b60201c565b620009f260201b60201c565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000d5692919062001a10565b60405180910390a250505b5b505050565b5f62000d7862000e0e60201b60201c565b905090565b5f80825f018054905090505f811462000de15762000db2835f0160018362000da6919062001c04565b62000e2560201b60201c565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1662000de3565b5f5b915050919050565b5f8062000e02855f01858562000e3760201b60201c565b91509150935093915050565b5f62000e2043620011b860201b60201c565b905090565b5f825f528160205f2001905092915050565b5f805f858054905090505f811115620010d0575f62000e6b8760018462000e5f919062001c04565b62000e2560201b60201c565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff16111562000f57576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff160362000fe5578462000f938860018562000f87919062001c04565b62000e2560201b60201c565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550620010be565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050620011b0565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b5f65ffffffffffff80168211156200120c576030826040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526004016200120392919062001c7f565b60405180910390fd5b819050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620012438262001218565b9050919050565b620012558162001237565b811462001260575f80fd5b50565b5f8151905062001273816200124a565b92915050565b5f6020828403121562001291576200129062001214565b5b5f620012a08482850162001263565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200132557607f821691505b6020821081036200133b576200133a620012e0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200139f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001362565b620013ab868362001362565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620013f5620013ef620013e984620013c3565b620013cc565b620013c3565b9050919050565b5f819050919050565b6200141083620013d5565b620014286200141f82620013fc565b8484546200136e565b825550505050565b5f90565b6200143e62001430565b6200144b81848462001405565b505050565b5b818110156200147257620014665f8262001434565b60018101905062001451565b5050565b601f821115620014c1576200148b8162001341565b620014968462001353565b81016020851015620014a6578190505b620014be620014b58562001353565b83018262001450565b50505b505050565b5f82821c905092915050565b5f620014e35f1984600802620014c6565b1980831691505092915050565b5f620014fd8383620014d2565b9150826002028217905092915050565b6200151882620012a9565b67ffffffffffffffff811115620015345762001533620012b3565b5b6200154082546200130d565b6200154d82828562001476565b5f60209050601f83116001811462001583575f84156200156e578287015190505b6200157a8582620014f0565b865550620015e9565b601f198416620015938662001341565b5f5b82811015620015bc5784890151825560018201915060208501945060208101905062001595565b86831015620015dc5784890151620015d8601f891682620014d2565b8355505b6001600288020188555050505b505050505050565b620015fc8162001237565b82525050565b5f602082019050620016175f830184620015f1565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620016a7578086048111156200167f576200167e6200161d565b5b60018516156200168f5780820291505b80810290506200169f856200164a565b94506200165f565b94509492505050565b5f82620016c1576001905062001793565b81620016d0575f905062001793565b8160018114620016e95760028114620016f4576200172a565b600191505062001793565b60ff8411156200170957620017086200161d565b5b8360020a9150848211156200172357620017226200161d565b5b5062001793565b5060208310610133831016604e8410600b8410161715620017645782820a9050838111156200175e576200175d6200161d565b5b62001793565b62001773848484600162001656565b925090508184048111156200178d576200178c6200161d565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620017b282620013c3565b9150620017bf836200179a565b9250620017ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620016b0565b905092915050565b5f6200180282620013c3565b91506200180f83620013c3565b92508282026200181f81620013c3565b915082820484148315176200183957620018386200161d565b5b5092915050565b5f819050919050565b620018548162001840565b82525050565b6200186581620013c3565b82525050565b5f60a082019050620018805f83018862001849565b6200188f602083018762001849565b6200189e604083018662001849565b620018ad60608301856200185a565b620018bc6080830184620015f1565b9695505050505050565b5f82825260208201905092915050565b5f5b83811015620018f5578082015181840152602081019050620018d8565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6200191c82620012a9565b620019288185620018c6565b93506200193a818560208601620018d6565b620019458162001900565b840191505092915050565b5f6020820190508181035f8301526200196a818462001910565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f62001998825162001840565b80915050919050565b5f620019ad8262001972565b82620019b9846200197c565b9050620019c6816200198b565b9250602082101562001a095762001a047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262001362565b831692505b5050919050565b5f60408201905062001a255f8301856200185a565b62001a3460208301846200185a565b9392505050565b5f62001a4782620013c3565b915062001a5483620013c3565b925082820190508082111562001a6f5762001a6e6200161d565b5b92915050565b5f60608201905062001a8a5f830186620015f1565b62001a9960208301856200185a565b62001aa860408301846200185a565b949350505050565b5f60208201905062001ac55f8301846200185a565b92915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62001afc8262001acb565b915062001b098362001acb565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111562001b3e5762001b3d6200161d565b5b92915050565b5f819050919050565b5f62001b6d62001b6762001b618462001b44565b620013cc565b6200179a565b9050919050565b62001b7f8162001b4d565b82525050565b5f60408201905062001b9a5f83018562001b74565b62001ba960208301846200185a565b9392505050565b5f62001bbc8262001acb565b915062001bc98362001acb565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111562001bfe5762001bfd6200161d565b5b92915050565b5f62001c1082620013c3565b915062001c1d83620013c3565b925082820390508181111562001c385762001c376200161d565b5b92915050565b5f819050919050565b5f62001c6762001c6162001c5b8462001c3e565b620013cc565b6200179a565b9050919050565b62001c798162001c47565b82525050565b5f60408201905062001c945f83018562001c6e565b62001ca360208301846200185a565b9392505050565b60805160a05160c05160e05161010051610120516101405161399c62001cfc5f395f61154d01525f61151201525f61195501525f61193401525f61104101525f61109701525f6110c0015261399c5ff3fe608060405234801561000f575f80fd5b506004361061018c575f3560e01c80637ecebe00116100dc5780639ab24eb011610095578063d505accf1161006f578063d505accf146104c6578063dd62ed3e146104e2578063f1127ed814610512578063f2fde38b146105425761018c565b80639ab24eb01461044a578063a9059cbb1461047a578063c3cda520146104aa5761018c565b80637ecebe001461036c57806384b0196e1461039c5780638da5cb5b146103c05780638e539e8c146103de57806391ddadf41461040e57806395d89b411461042c5761018c565b80633a46b1a8116101495780635c19a95c116101235780635c19a95c146102e65780636fcfff451461030257806370a0823114610332578063715018a6146103625761018c565b80633a46b1a8146102685780634bf5d7e914610298578063587cde1e146102b65761018c565b806306fdde0314610190578063095ea7b3146101ae57806318160ddd146101de57806323b872dd146101fc578063313ce5671461022c5780633644e5151461024a575b5f80fd5b61019861055e565b6040516101a59190612cbf565b60405180910390f35b6101c860048036038101906101c39190612d70565b6105ee565b6040516101d59190612dc8565b60405180910390f35b6101e6610610565b6040516101f39190612df0565b60405180910390f35b61021660048036038101906102119190612e09565b610619565b6040516102239190612dc8565b60405180910390f35b610234610647565b6040516102419190612e74565b60405180910390f35b61025261064f565b60405161025f9190612ea5565b60405180910390f35b610282600480360381019061027d9190612d70565b61065d565b60405161028f9190612df0565b60405180910390f35b6102a0610733565b6040516102ad9190612cbf565b60405180910390f35b6102d060048036038101906102cb9190612ebe565b6107c7565b6040516102dd9190612ef8565b60405180910390f35b61030060048036038101906102fb9190612ebe565b61082c565b005b61031c60048036038101906103179190612ebe565b610845565b6040516103299190612f2f565b60405180910390f35b61034c60048036038101906103479190612ebe565b610856565b6040516103599190612df0565b60405180910390f35b61036a61089b565b005b61038660048036038101906103819190612ebe565b6108ae565b6040516103939190612df0565b60405180910390f35b6103a46108bf565b6040516103b79796959493929190613039565b60405180910390f35b6103c8610964565b6040516103d59190612ef8565b60405180910390f35b6103f860048036038101906103f391906130bb565b61098c565b6040516104059190612df0565b60405180910390f35b610416610a26565b6040516104239190613106565b60405180910390f35b610434610a34565b6040516104419190612cbf565b60405180910390f35b610464600480360381019061045f9190612ebe565b610ac4565b6040516104719190612df0565b60405180910390f35b610494600480360381019061048f9190612d70565b610b2d565b6040516104a19190612dc8565b60405180910390f35b6104c460048036038101906104bf9190613173565b610b4f565b005b6104e060048036038101906104db91906131fc565b610c14565b005b6104fc60048036038101906104f79190613299565b610d59565b6040516105099190612df0565b60405180910390f35b61052c60048036038101906105279190613301565b610ddb565b60405161053991906133af565b60405180910390f35b61055c60048036038101906105579190612ebe565b610df5565b005b60606003805461056d906133f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610599906133f5565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b5050505050905090565b5f806105f8610ea3565b9050610605818585610eaa565b600191505092915050565b5f600254905090565b5f80610623610ea3565b9050610630858285610ebc565b61063b858585610f4e565b60019150509392505050565b5f6012905090565b5f61065861103e565b905090565b5f80610667610a26565b90508065ffffffffffff1683106106b75782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016106ae929190613425565b60405180910390fd5b61070e6106c3846110f4565b60095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061114d90919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff1691505092915050565b606061073d61123a565b65ffffffffffff1661074d610a26565b65ffffffffffff161461078c576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280601d81526020017f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000815250905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610835610ea3565b90506108418183611249565b5050565b5f61084f82611359565b9050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108a36113ae565b6108ac5f611435565b565b5f6108b8826114f8565b9050919050565b5f6060805f805f60606108d0611509565b6108d8611544565b46305f801b5f67ffffffffffffffff8111156108f7576108f661344c565b5b6040519080825280602002602001820160405280156109255781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80610996610a26565b90508065ffffffffffff1683106109e65782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016109dd929190613425565b60405180910390fd5b610a026109f2846110f4565b600a61114d90919063ffffffff16565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b5f610a2f61123a565b905090565b606060048054610a43906133f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f906133f5565b8015610aba5780601f10610a9157610100808354040283529160200191610aba565b820191905f5260205f20905b815481529060010190602001808311610a9d57829003601f168201915b5050505050905090565b5f610b0a60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061157f565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff169050919050565b5f80610b37610ea3565b9050610b44818585610f4e565b600191505092915050565b83421115610b9457836040517f4683af0e000000000000000000000000000000000000000000000000000000008152600401610b8b9190612df0565b60405180910390fd5b5f610bf5610bed7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610bd29493929190613479565b604051602081830303815290604052805190602001206115e1565b8585856115fa565b9050610c018187611628565b610c0b8188611249565b50505050505050565b83421115610c5957836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610c509190612df0565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610c878c61167f565b89604051602001610c9d969594939291906134bc565b6040516020818303038152906040528051906020012090505f610cbf826115e1565b90505f610cce828787876115fa565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d4257808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610d3992919061351b565b60405180910390fd5b610d4d8a8a8a610eaa565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610de3612bf9565b610ded83836116d2565b905092915050565b610dfd6113ae565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e6d575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e649190612ef8565b60405180910390fd5b610e7681611435565b50565b5f8183610e86919061356f565b905092915050565b5f8183610e9b91906135bc565b905092915050565b5f33905090565b610eb78383836001611731565b505050565b5f610ec78484610d59565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f485781811015610f39578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610f3093929190613609565b60405180910390fd5b610f4784848484035f611731565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fbe575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610fb59190612ef8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361102e575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016110259190612ef8565b60405180910390fd5b611039838383611900565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156110b957507f000000000000000000000000000000000000000000000000000000000000000046145b156110e6577f000000000000000000000000000000000000000000000000000000000000000090506110f1565b6110ee611910565b90505b90565b5f65ffffffffffff8016821115611145576030826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161113c929190613680565b60405180910390fd5b819050919050565b5f80835f018054905090505f8082905060058311156111ce575f611170846119a5565b8461117b91906136a7565b9050611189875f0182611a9b565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff168665ffffffffffff1610156111bc578091506111cc565b6001816111c991906136da565b92505b505b5f6111dd875f01878585611aad565b90505f811461122c576111fe875f016001836111f991906136a7565b611a9b565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1661122e565b5f5b94505050505092915050565b5f611244436110f4565b905090565b5f611253836107c7565b90508160085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611354818361134f86611b22565b611b33565b505050565b5f6113a76113a260095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20611da3565b611db2565b9050919050565b6113b6610ea3565b73ffffffffffffffffffffffffffffffffffffffff166113d4610964565b73ffffffffffffffffffffffffffffffffffffffff1614611433576113f7610ea3565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161142a9190612ef8565b60405180910390fd5b565b5f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f61150282611e09565b9050919050565b606061153f60057f0000000000000000000000000000000000000000000000000000000000000000611e4f90919063ffffffff16565b905090565b606061157a60067f0000000000000000000000000000000000000000000000000000000000000000611e4f90919063ffffffff16565b905090565b5f80825f018054905090505f81146115d7576115a9835f016001836115a491906136a7565b611a9b565b5f0160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff166115d9565b5f5b915050919050565b5f6115f36115ed61103e565b83611efc565b9050919050565b5f805f8061160a88888888611f3c565b92509250925061161a8282612023565b829350505050949350505050565b5f6116328361167f565b905080821461167a5782816040517f752d88c000000000000000000000000000000000000000000000000000000000815260040161167192919061370d565b60405180910390fd5b505050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b6116da612bf9565b6117298260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2061218590919063ffffffff16565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117a1575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016117989190612ef8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611811575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016118089190612ef8565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156118fa578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516118f19190612df0565b60405180910390a35b50505050565b61190b838383612254565b505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161198a959493929190613734565b60405160208183030381529060405280519060200120905090565b5f8082036119b5575f9050611a96565b5f60016119c184612302565b901c6001901b905060018184816119db576119da613785565b5b048201901c905060018184816119f4576119f3613785565b5b048201901c90506001818481611a0d57611a0c613785565b5b048201901c90506001818481611a2657611a25613785565b5b048201901c90506001818481611a3f57611a3e613785565b5b048201901c90506001818481611a5857611a57613785565b5b048201901c90506001818481611a7157611a70613785565b5b048201901c9050611a9281828581611a8c57611a8b613785565b5b046123d9565b9150505b919050565b5f825f528160205f2001905092915050565b5f5b81831015611b17575f611ac284846123f1565b90508465ffffffffffff16611ad78783611a9b565b5f015f9054906101000a900465ffffffffffff1665ffffffffffff161115611b0157809250611b11565b600181611b0e91906136da565b93505b50611aaf565b819050949350505050565b5f611b2c82610856565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b6e57505f81115b15611d9e575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611c88575f80611bf960095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20610e8e611bf486612416565b612483565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611c7d9291906137b2565b60405180910390a250505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d9d575f80611d0e60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20610e79611d0986612416565b612483565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff16915079ffffffffffffffffffffffffffffffffffffffffffffffffffff1691508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611d929291906137b2565b60405180910390a250505b5b505050565b5f815f01805490509050919050565b5f63ffffffff8016821115611e01576020826040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600401611df8929190613812565b60405180910390fd5b819050919050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606060ff5f1b8314611e6b57611e64836124c2565b9050611ef6565b818054611e77906133f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611ea3906133f5565b8015611eee5780601f10611ec557610100808354040283529160200191611eee565b820191905f5260205f20905b815481529060010190602001808311611ed157829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c1115611f78575f600385925092509250612019565b5f6001888888886040515f8152602001604052604051611f9b9493929190613839565b6020604051602081039080840390855afa158015611fbb573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361200c575f60015f801b93509350935050612019565b805f805f1b935093509350505b9450945094915050565b5f60038111156120365761203561387c565b5b8260038111156120495761204861387c565b5b031561218157600160038111156120635761206261387c565b5b8260038111156120765761207561387c565b5b036120ad576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156120c1576120c061387c565b5b8260038111156120d4576120d361387c565b5b0361211857805f1c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161210f9190612df0565b60405180910390fd5b60038081111561212b5761212a61387c565b5b82600381111561213e5761213d61387c565b5b0361218057806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016121779190612ea5565b60405180910390fd5b5b5050565b61218d612bf9565b825f018263ffffffff16815481106121a8576121a76138a9565b5b905f5260205f20016040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61225f838383612534565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122f2575f61229b610610565b90505f6122a661274d565b9050808211156122ef5781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016122e69291906137b2565b60405180910390fd5b50505b6122fd838383612770565b505050565b5f805f90505f608084901c111561232157608083901c92506080810190505b5f604084901c111561233b57604083901c92506040810190505b5f602084901c111561235557602083901c92506020810190505b5f601084901c111561236f57601083901c92506010810190505b5f600884901c111561238957600883901c92506008810190505b5f600484901c11156123a357600483901c92506004810190505b5f600284901c11156123bd57600283901c92506002810190505b5f600184901c11156123d0576001810190505b80915050919050565b5f8183106123e757816123e9565b825b905092915050565b5f600282841861240191906138d6565b82841661240e91906136da565b905092915050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561247b5760d0826040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260040161247292919061393f565b60405180910390fd5b819050919050565b5f806124b6612490610a26565b6124a661249c8861157f565b868863ffffffff16565b876128289092919063ffffffff16565b91509150935093915050565b60605f6124ce83612843565b90505f602067ffffffffffffffff8111156124ec576124eb61344c565b5b6040519080825280601f01601f19166020018201604052801561251e5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612584578060025f82825461257891906136da565b92505081905550612652565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561260d578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161260493929190613609565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612699578060025f82825403925050819055506126e3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127409190612df0565b60405180910390a3505050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff8016905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127bc576127b9600a610e796127b484612416565b612483565b50505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280857612805600a610e8e61280084612416565b612483565b50505b612823612814846107c7565b61281d846107c7565b83611b33565b505050565b5f80612837855f018585612891565b91509150935093915050565b5f8060ff835f1c169050601f811115612888576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f805f858054905090505f811115612b11575f6128ba876001846128b591906136a7565b611a9b565b6040518060400160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900479ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff1679ffffffffffffffffffffffffffffffffffffffffffffffffffff168152505090508565ffffffffffff16815f015165ffffffffffff1611156129a5576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8565ffffffffffff16815f015165ffffffffffff1603612a2757846129d6886001856129d191906136a7565b611a9b565b5f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550612b00565b8660405180604001604052808865ffffffffffff1681526020018779ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b806020015185935093505050612bf1565b8560405180604001604052808765ffffffffffff1681526020018679ffffffffffffffffffffffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003905f5260205f20015f909190919091505f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548179ffffffffffffffffffffffffffffffffffffffffffffffffffff021916908379ffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505f8492509250505b935093915050565b60405180604001604052805f65ffffffffffff1681526020015f79ffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612c6c578082015181840152602081019050612c51565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612c9182612c35565b612c9b8185612c3f565b9350612cab818560208601612c4f565b612cb481612c77565b840191505092915050565b5f6020820190508181035f830152612cd78184612c87565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d0c82612ce3565b9050919050565b612d1c81612d02565b8114612d26575f80fd5b50565b5f81359050612d3781612d13565b92915050565b5f819050919050565b612d4f81612d3d565b8114612d59575f80fd5b50565b5f81359050612d6a81612d46565b92915050565b5f8060408385031215612d8657612d85612cdf565b5b5f612d9385828601612d29565b9250506020612da485828601612d5c565b9150509250929050565b5f8115159050919050565b612dc281612dae565b82525050565b5f602082019050612ddb5f830184612db9565b92915050565b612dea81612d3d565b82525050565b5f602082019050612e035f830184612de1565b92915050565b5f805f60608486031215612e2057612e1f612cdf565b5b5f612e2d86828701612d29565b9350506020612e3e86828701612d29565b9250506040612e4f86828701612d5c565b9150509250925092565b5f60ff82169050919050565b612e6e81612e59565b82525050565b5f602082019050612e875f830184612e65565b92915050565b5f819050919050565b612e9f81612e8d565b82525050565b5f602082019050612eb85f830184612e96565b92915050565b5f60208284031215612ed357612ed2612cdf565b5b5f612ee084828501612d29565b91505092915050565b612ef281612d02565b82525050565b5f602082019050612f0b5f830184612ee9565b92915050565b5f63ffffffff82169050919050565b612f2981612f11565b82525050565b5f602082019050612f425f830184612f20565b92915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b612f7c81612f48565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612fb481612d3d565b82525050565b5f612fc58383612fab565b60208301905092915050565b5f602082019050919050565b5f612fe782612f82565b612ff18185612f8c565b9350612ffc83612f9c565b805f5b8381101561302c5781516130138882612fba565b975061301e83612fd1565b925050600181019050612fff565b5085935050505092915050565b5f60e08201905061304c5f83018a612f73565b818103602083015261305e8189612c87565b905081810360408301526130728188612c87565b90506130816060830187612de1565b61308e6080830186612ee9565b61309b60a0830185612e96565b81810360c08301526130ad8184612fdd565b905098975050505050505050565b5f602082840312156130d0576130cf612cdf565b5b5f6130dd84828501612d5c565b91505092915050565b5f65ffffffffffff82169050919050565b613100816130e6565b82525050565b5f6020820190506131195f8301846130f7565b92915050565b61312881612e59565b8114613132575f80fd5b50565b5f813590506131438161311f565b92915050565b61315281612e8d565b811461315c575f80fd5b50565b5f8135905061316d81613149565b92915050565b5f805f805f8060c0878903121561318d5761318c612cdf565b5b5f61319a89828a01612d29565b96505060206131ab89828a01612d5c565b95505060406131bc89828a01612d5c565b94505060606131cd89828a01613135565b93505060806131de89828a0161315f565b92505060a06131ef89828a0161315f565b9150509295509295509295565b5f805f805f805f60e0888a03121561321757613216612cdf565b5b5f6132248a828b01612d29565b97505060206132358a828b01612d29565b96505060406132468a828b01612d5c565b95505060606132578a828b01612d5c565b94505060806132688a828b01613135565b93505060a06132798a828b0161315f565b92505060c061328a8a828b0161315f565b91505092959891949750929550565b5f80604083850312156132af576132ae612cdf565b5b5f6132bc85828601612d29565b92505060206132cd85828601612d29565b9150509250929050565b6132e081612f11565b81146132ea575f80fd5b50565b5f813590506132fb816132d7565b92915050565b5f806040838503121561331757613316612cdf565b5b5f61332485828601612d29565b9250506020613335858286016132ed565b9150509250929050565b613348816130e6565b82525050565b5f79ffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61337c8161334e565b82525050565b604082015f8201516133965f85018261333f565b5060208201516133a96020850182613373565b50505050565b5f6040820190506133c25f830184613382565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061340c57607f821691505b60208210810361341f5761341e6133c8565b5b50919050565b5f6040820190506134385f830185612de1565b61344560208301846130f7565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60808201905061348c5f830187612e96565b6134996020830186612ee9565b6134a66040830185612de1565b6134b36060830184612de1565b95945050505050565b5f60c0820190506134cf5f830189612e96565b6134dc6020830188612ee9565b6134e96040830187612ee9565b6134f66060830186612de1565b6135036080830185612de1565b61351060a0830184612de1565b979650505050505050565b5f60408201905061352e5f830185612ee9565b61353b6020830184612ee9565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135798261334e565b91506135848361334e565b9250828201905079ffffffffffffffffffffffffffffffffffffffffffffffffffff8111156135b6576135b5613542565b5b92915050565b5f6135c68261334e565b91506135d18361334e565b9250828203905079ffffffffffffffffffffffffffffffffffffffffffffffffffff81111561360357613602613542565b5b92915050565b5f60608201905061361c5f830186612ee9565b6136296020830185612de1565b6136366040830184612de1565b949350505050565b5f819050919050565b5f819050919050565b5f61366a6136656136608461363e565b613647565b612e59565b9050919050565b61367a81613650565b82525050565b5f6040820190506136935f830185613671565b6136a06020830184612de1565b9392505050565b5f6136b182612d3d565b91506136bc83612d3d565b92508282039050818111156136d4576136d3613542565b5b92915050565b5f6136e482612d3d565b91506136ef83612d3d565b925082820190508082111561370757613706613542565b5b92915050565b5f6040820190506137205f830185612ee9565b61372d6020830184612de1565b9392505050565b5f60a0820190506137475f830188612e96565b6137546020830187612e96565b6137616040830186612e96565b61376e6060830185612de1565b61377b6080830184612ee9565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6040820190506137c55f830185612de1565b6137d26020830184612de1565b9392505050565b5f819050919050565b5f6137fc6137f76137f2846137d9565b613647565b612e59565b9050919050565b61380c816137e2565b82525050565b5f6040820190506138255f830185613803565b6138326020830184612de1565b9392505050565b5f60808201905061384c5f830187612e96565b6138596020830186612e65565b6138666040830185612e96565b6138736060830184612e96565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6138e082612d3d565b91506138eb83612d3d565b9250826138fb576138fa613785565b5b828204905092915050565b5f819050919050565b5f61392961392461391f84613906565b613647565b612e59565b9050919050565b6139398161390f565b82525050565b5f6040820190506139525f830185613930565b61395f6020830184612de1565b939250505056fea2646970667358221220f8e5c21117df0fea058a9f597544b2c029d699ad223d36a8764a045366e4d87664736f6c63430008180033000000000000000000000000119590c0d04dc9b41c8e316527fd53f46036de19