0x60806040523480156200001157600080fd5b5060405162001e6338038062001e63833981810160405281019062000037919062000323565b6040518060400160405280601081526020017f4f7374726f76736b796920546f6b656e000000000000000000000000000000008152506040518060400160405280600481526020017f4f5354540000000000000000000000000000000000000000000000000000000081525069152d02c7e14af68000008260049081620000bf9190620005cf565b508160059081620000d19190620005cf565b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012581336200012f60201b60201c565b50505050620007d1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620001c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b99062000717565b60405180910390fd5b620001d660008284620002b460201b60201c565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000227919062000768565b925050819055508160008082825462000241919062000768565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620002a89190620007b4565b60405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002eb82620002be565b9050919050565b620002fd81620002de565b81146200030957600080fd5b50565b6000815190506200031d81620002f2565b92915050565b6000602082840312156200033c576200033b620002b9565b5b60006200034c848285016200030c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d757607f821691505b602082108103620003ed57620003ec6200038f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000418565b62000463868362000418565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b0620004aa620004a4846200047b565b62000485565b6200047b565b9050919050565b6000819050919050565b620004cc836200048f565b620004e4620004db82620004b7565b84845462000425565b825550505050565b600090565b620004fb620004ec565b62000508818484620004c1565b505050565b5b81811015620005305762000524600082620004f1565b6001810190506200050e565b5050565b601f8211156200057f576200054981620003f3565b620005548462000408565b8101602085101562000564578190505b6200057c620005738562000408565b8301826200050d565b50505b505050565b600082821c905092915050565b6000620005a46000198460080262000584565b1980831691505092915050565b6000620005bf838362000591565b9150826002028217905092915050565b620005da8262000355565b67ffffffffffffffff811115620005f657620005f562000360565b5b620006028254620003be565b6200060f82828562000534565b600060209050601f83116001811462000647576000841562000632578287015190505b6200063e8582620005b1565b865550620006ae565b601f1984166200065786620003f3565b60005b8281101562000681578489015182556001820191506020850194506020810190506200065a565b86831015620006a157848901516200069d601f89168262000591565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f6e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b6000620006ff600d83620006b6565b91506200070c82620006c7565b602082019050919050565b600060208201905081810360008301526200073281620006f0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000775826200047b565b915062000782836200047b565b92508282019050808211156200079d576200079c62000739565b5b92915050565b620007ae816200047b565b82525050565b6000602082019050620007cb6000830184620007a3565b92915050565b61168280620007e16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806370a082311161007157806370a082311461014057806394bf804d1461017057806395d89b411461018c5780639dc29fac146101aa578063dd62ed3e146101c6578063ffc3a769146101f6576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100e857806323b872dd14610106578063313ce56714610122575b600080fd5b6100b6610212565b6040516100c39190610e51565b60405180910390f35b6100e660048036038101906100e19190610f1b565b6102a4565b005b6100f06102b3565b6040516100fd9190610f6a565b60405180910390f35b610120600480360381019061011b9190610f85565b6102bc565b005b61012a610611565b6040516101379190610f6a565b60405180910390f35b61015a60048036038101906101559190610fd8565b61061a565b6040516101679190610f6a565b60405180910390f35b61018a60048036038101906101859190611005565b610663565b005b6101946107d7565b6040516101a19190610e51565b60405180910390f35b6101c460048036038101906101bf9190610f1b565b610869565b005b6101e060048036038101906101db9190611045565b610977565b6040516101ed9190610f6a565b60405180910390f35b610210600480360381019061020b9190611290565b6109fe565b005b60606004805461022190611337565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90611337565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b5050505050905090565b6102af338383610cd1565b5050565b60008054905090565b82600167ffffffffffffffff8111156102d8576102d761108a565b5b6040519080825280602002602001820160405280156103065781602001602082028036833780820191505090505b506000805b825181101561034f5782818151811061032757610326611368565b5b60200260200101518261033a91906113c6565b91508080610347906113fa565b91505061030b565b508061035a8461061a565b101561039b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103929061148e565b60405180910390fd5b6103a6868686610dbc565b83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045c906114fa565b60405180910390fd5b83600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104f1919061151a565b9250508190555083600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610547919061151a565b9250508190555083600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461059d91906113c6565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516106019190610f6a565b60405180910390a3505050505050565b60006012905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ea9061159a565b60405180910390fd5b6106ff60008284610dbc565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461074e91906113c6565b925050819055508160008082825461076691906113c6565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107cb9190610f6a565b60405180910390a35050565b6060600580546107e690611337565b80601f016020809104026020016040519081016040528092919081815260200182805461081290611337565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b5050505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f09061159a565b60405180910390fd5b61090582600083610dbc565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610954919061151a565b925050819055508060008082825461096c919061151a565b925050819055505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b33816000805b8251811015610a4857828181518110610a2057610a1f611368565b5b602002602001015182610a3391906113c6565b91508080610a40906113fa565b915050610a04565b5080610a538461061a565b1015610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b9061148e565b60405180910390fd5b8351855114610ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acf9061162c565b60405180910390fd5b60005b8551811015610cc957610b2333878381518110610afb57610afa611368565b5b6020026020010151878481518110610b1657610b15611368565b5b6020026020010151610dbc565b848181518110610b3657610b35611368565b5b6020026020010151600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b8c919061151a565b92505081905550848181518110610ba657610ba5611368565b5b602002602001015160026000888481518110610bc557610bc4611368565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c1691906113c6565b92505081905550858181518110610c3057610c2f611368565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110610c9957610c98611368565b5b6020026020010151604051610cae9190610f6a565b60405180910390a38080610cc1906113fa565b915050610adb565b505050505050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6e11fb1b7f119e3f2fa29896ef5fdf8b8a2d0d4df6fe90ba8668e7d8b2ffa25e83604051610daf9190610f6a565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610dfb578082015181840152602081019050610de0565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e2382610dc1565b610e2d8185610dcc565b9350610e3d818560208601610ddd565b610e4681610e07565b840191505092915050565b60006020820190508181036000830152610e6b8184610e18565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610eb282610e87565b9050919050565b610ec281610ea7565b8114610ecd57600080fd5b50565b600081359050610edf81610eb9565b92915050565b6000819050919050565b610ef881610ee5565b8114610f0357600080fd5b50565b600081359050610f1581610eef565b92915050565b60008060408385031215610f3257610f31610e7d565b5b6000610f4085828601610ed0565b9250506020610f5185828601610f06565b9150509250929050565b610f6481610ee5565b82525050565b6000602082019050610f7f6000830184610f5b565b92915050565b600080600060608486031215610f9e57610f9d610e7d565b5b6000610fac86828701610ed0565b9350506020610fbd86828701610ed0565b9250506040610fce86828701610f06565b9150509250925092565b600060208284031215610fee57610fed610e7d565b5b6000610ffc84828501610ed0565b91505092915050565b6000806040838503121561101c5761101b610e7d565b5b600061102a85828601610f06565b925050602061103b85828601610ed0565b9150509250929050565b6000806040838503121561105c5761105b610e7d565b5b600061106a85828601610ed0565b925050602061107b85828601610ed0565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6110c282610e07565b810181811067ffffffffffffffff821117156110e1576110e061108a565b5b80604052505050565b60006110f4610e73565b905061110082826110b9565b919050565b600067ffffffffffffffff8211156111205761111f61108a565b5b602082029050602081019050919050565b600080fd5b600061114961114484611105565b6110ea565b9050808382526020820190506020840283018581111561116c5761116b611131565b5b835b8181101561119557806111818882610ed0565b84526020840193505060208101905061116e565b5050509392505050565b600082601f8301126111b4576111b3611085565b5b81356111c4848260208601611136565b91505092915050565b600067ffffffffffffffff8211156111e8576111e761108a565b5b602082029050602081019050919050565b600061120c611207846111cd565b6110ea565b9050808382526020820190506020840283018581111561122f5761122e611131565b5b835b8181101561125857806112448882610f06565b845260208401935050602081019050611231565b5050509392505050565b600082601f83011261127757611276611085565b5b81356112878482602086016111f9565b91505092915050565b600080604083850312156112a7576112a6610e7d565b5b600083013567ffffffffffffffff8111156112c5576112c4610e82565b5b6112d18582860161119f565b925050602083013567ffffffffffffffff8111156112f2576112f1610e82565b5b6112fe85828601611262565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061134f57607f821691505b60208210810361136257611361611308565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006113d182610ee5565b91506113dc83610ee5565b92508282019050808211156113f4576113f3611397565b5b92915050565b600061140582610ee5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361143757611436611397565b5b600182019050919050565b7f6e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b6000611478601283610dcc565b915061148382611442565b602082019050919050565b600060208201905081810360008301526114a78161146b565b9050919050565b7f636865636b20616c6c6f77616e63652100000000000000000000000000000000600082015250565b60006114e4601083610dcc565b91506114ef826114ae565b602082019050919050565b60006020820190508181036000830152611513816114d7565b9050919050565b600061152582610ee5565b915061153083610ee5565b925082820390508181111561154857611547611397565b5b92915050565b7f6e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b6000611584600d83610dcc565b915061158f8261154e565b602082019050919050565b600060208201905081810360008301526115b381611577565b9050919050565b7f746f20616e6420616d6f756e7473206172726179206c656e67746873206d697360008201527f6d61746368210000000000000000000000000000000000000000000000000000602082015250565b6000611616602683610dcc565b9150611621826115ba565b604082019050919050565b6000602082019050818103600083015261164581611609565b905091905056fea26469706673582212204919481008fcaf87fbd0f7243e3666691f31efee1532ebce0ab8c2ed7eb7121e64736f6c634300081200330000000000000000000000007c6f0bbeccc4c0f445024fa4818668509d8b9287