0x60806040523480156200001157600080fd5b50336040518060400160405280600a81526020017f474f4f4420546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474f4f440000000000000000000000000000000000000000000000000000000081525081600390816200009091906200048d565b508060049081620000a291906200048d565b5050506000600560006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001355760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200012c9190620005b9565b60405180910390fd5b62000146816200014d60201b60201c565b50620005d6565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029557607f821691505b602082108103620002ab57620002aa6200024d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002d6565b620003218683620002d6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200036e62000368620003628462000339565b62000343565b62000339565b9050919050565b6000819050919050565b6200038a836200034d565b620003a2620003998262000375565b848454620002e3565b825550505050565b600090565b620003b9620003aa565b620003c68184846200037f565b505050565b5b81811015620003ee57620003e2600082620003af565b600181019050620003cc565b5050565b601f8211156200043d576200040781620002b1565b6200041284620002c6565b8101602085101562000422578190505b6200043a6200043185620002c6565b830182620003cb565b50505b505050565b600082821c905092915050565b6000620004626000198460080262000442565b1980831691505092915050565b60006200047d83836200044f565b9150826002028217905092915050565b620004988262000213565b67ffffffffffffffff811115620004b457620004b36200021e565b5b620004c082546200027c565b620004cd828285620003f2565b600060209050601f831160018114620005055760008415620004f0578287015190505b620004fc85826200046f565b8655506200056c565b601f1984166200051586620002b1565b60005b828110156200053f5784890151825560018201915060208501945060208101905062000518565b868310156200055f57848901516200055b601f8916826200044f565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005a18262000574565b9050919050565b620005b38162000594565b82525050565b6000602082019050620005d06000830184620005a8565b92915050565b611ae680620005e66000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806367243482116100ad5780638da5cb5b116100715780638da5cb5b146102e557806395d89b4114610303578063a9059cbb14610321578063dd62ed3e14610351578063f2fde38b146103815761012c565b8063672434821461026957806370a0823114610285578063715018a6146102b557806379cc6790146102bf5780638456cb59146102db5761012c565b806332cb6b0c116100f457806332cb6b0c146101eb5780633f4ba83a1461020957806340c10f191461021357806342966c681461022f5780635c975abb1461024b5761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d578063313ce567146101cd575b600080fd5b61013961039d565b6040516101469190611306565b60405180910390f35b610169600480360381019061016491906113d0565b61042f565b604051610176919061142b565b60405180910390f35b610187610452565b6040516101949190611455565b60405180910390f35b6101b760048036038101906101b29190611470565b61045c565b6040516101c4919061142b565b60405180910390f35b6101d561048b565b6040516101e291906114df565b60405180910390f35b6101f3610494565b6040516102009190611455565b60405180910390f35b6102116104a3565b005b61022d600480360381019061022891906113d0565b6104b5565b005b610249600480360381019061024491906114fa565b61052b565b005b61025361053f565b604051610260919061142b565b60405180910390f35b610283600480360381019061027e9190611732565b610556565b005b61029f600480360381019061029a91906117aa565b6106ae565b6040516102ac9190611455565b60405180910390f35b6102bd6106f6565b005b6102d960048036038101906102d491906113d0565b61070a565b005b6102e361072a565b005b6102ed61073c565b6040516102fa91906117e6565b60405180910390f35b61030b610766565b6040516103189190611306565b60405180910390f35b61033b600480360381019061033691906113d0565b6107f8565b604051610348919061142b565b60405180910390f35b61036b60048036038101906103669190611801565b61081b565b6040516103789190611455565b60405180910390f35b61039b600480360381019061039691906117aa565b6108a2565b005b6060600380546103ac90611870565b80601f01602080910402602001604051908101604052809291908181526020018280546103d890611870565b80156104255780601f106103fa57610100808354040283529160200191610425565b820191906000526020600020905b81548152906001019060200180831161040857829003601f168201915b5050505050905090565b60008061043a610928565b9050610447818585610930565b600191505092915050565b6000600254905090565b600080610467610928565b9050610474858285610942565b61047f8585856109d6565b60019150509392505050565b60006012905090565b6a295be96e6406697200000081565b6104ab610aca565b6104b3610b51565b565b6104bd610aca565b6a295be96e64066972000000816104d2610452565b6104dc91906118d0565b111561051d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051490611950565b60405180910390fd5b6105278282610bb4565b5050565b61053c610536610928565b82610c36565b50565b6000600560009054906101000a900460ff16905090565b61055e610aca565b80518251146105a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610599906119e2565b60405180910390fd5b6000805b83518110156105ea578281815181106105c2576105c1611a02565b5b6020026020010151826105d591906118d0565b915080806105e290611a31565b9150506105a6565b506a295be96e6406697200000081610600610452565b61060a91906118d0565b111561064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064290611950565b60405180910390fd5b60005b83518110156106a85761069584828151811061066d5761066c611a02565b5b602002602001015184838151811061068857610687611a02565b5b6020026020010151610bb4565b80806106a090611a31565b91505061064e565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6106fe610aca565b6107086000610cb8565b565b61071c82610716610928565b83610942565b6107268282610c36565b5050565b610732610aca565b61073a610d7e565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461077590611870565b80601f01602080910402602001604051908101604052809291908181526020018280546107a190611870565b80156107ee5780601f106107c3576101008083540402835291602001916107ee565b820191906000526020600020905b8154815290600101906020018083116107d157829003601f168201915b5050505050905090565b600080610803610928565b90506108108185856109d6565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6108aa610aca565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361091c5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161091391906117e6565b60405180910390fd5b61092581610cb8565b50565b600033905090565b61093d8383836001610de1565b505050565b600061094e848461081b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109d057818110156109c0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109b793929190611a79565b60405180910390fd5b6109cf84848484036000610de1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a485760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a3f91906117e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aba5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ab191906117e6565b60405180910390fd5b610ac5838383610fb8565b505050565b610ad2610928565b73ffffffffffffffffffffffffffffffffffffffff16610af061073c565b73ffffffffffffffffffffffffffffffffffffffff1614610b4f57610b13610928565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610b4691906117e6565b60405180910390fd5b565b610b59610fd0565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610b9d610928565b604051610baa91906117e6565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c265760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c1d91906117e6565b60405180910390fd5b610c3260008383610fb8565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ca85760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610c9f91906117e6565b60405180910390fd5b610cb482600083610fb8565b5050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610d86611010565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610dca610928565b604051610dd791906117e6565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e535760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e4a91906117e6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ec55760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ebc91906117e6565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610fb2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fa99190611455565b60405180910390a35b50505050565b610fc0611010565b610fcb838383611051565b505050565b610fd861053f565b61100e576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61101861053f565b1561104f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110a357806002600082825461109791906118d0565b92505081905550611176565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561112f578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161112693929190611a79565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111bf578060026000828254039250508190555061120c565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516112699190611455565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156112b0578082015181840152602081019050611295565b60008484015250505050565b6000601f19601f8301169050919050565b60006112d882611276565b6112e28185611281565b93506112f2818560208601611292565b6112fb816112bc565b840191505092915050565b6000602082019050818103600083015261132081846112cd565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113678261133c565b9050919050565b6113778161135c565b811461138257600080fd5b50565b6000813590506113948161136e565b92915050565b6000819050919050565b6113ad8161139a565b81146113b857600080fd5b50565b6000813590506113ca816113a4565b92915050565b600080604083850312156113e7576113e6611332565b5b60006113f585828601611385565b9250506020611406858286016113bb565b9150509250929050565b60008115159050919050565b61142581611410565b82525050565b6000602082019050611440600083018461141c565b92915050565b61144f8161139a565b82525050565b600060208201905061146a6000830184611446565b92915050565b60008060006060848603121561148957611488611332565b5b600061149786828701611385565b93505060206114a886828701611385565b92505060406114b9868287016113bb565b9150509250925092565b600060ff82169050919050565b6114d9816114c3565b82525050565b60006020820190506114f460008301846114d0565b92915050565b6000602082840312156115105761150f611332565b5b600061151e848285016113bb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611564826112bc565b810181811067ffffffffffffffff821117156115835761158261152c565b5b80604052505050565b6000611596611328565b90506115a2828261155b565b919050565b600067ffffffffffffffff8211156115c2576115c161152c565b5b602082029050602081019050919050565b600080fd5b60006115eb6115e6846115a7565b61158c565b9050808382526020820190506020840283018581111561160e5761160d6115d3565b5b835b8181101561163757806116238882611385565b845260208401935050602081019050611610565b5050509392505050565b600082601f83011261165657611655611527565b5b81356116668482602086016115d8565b91505092915050565b600067ffffffffffffffff82111561168a5761168961152c565b5b602082029050602081019050919050565b60006116ae6116a98461166f565b61158c565b905080838252602082019050602084028301858111156116d1576116d06115d3565b5b835b818110156116fa57806116e688826113bb565b8452602084019350506020810190506116d3565b5050509392505050565b600082601f83011261171957611718611527565b5b813561172984826020860161169b565b91505092915050565b6000806040838503121561174957611748611332565b5b600083013567ffffffffffffffff81111561176757611766611337565b5b61177385828601611641565b925050602083013567ffffffffffffffff81111561179457611793611337565b5b6117a085828601611704565b9150509250929050565b6000602082840312156117c0576117bf611332565b5b60006117ce84828501611385565b91505092915050565b6117e08161135c565b82525050565b60006020820190506117fb60008301846117d7565b92915050565b6000806040838503121561181857611817611332565b5b600061182685828601611385565b925050602061183785828601611385565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061188857607f821691505b60208210810361189b5761189a611841565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118db8261139a565b91506118e68361139a565b92508282019050808211156118fe576118fd6118a1565b5b92915050565b7f476f6f64546f6b656e3a204d617820737570706c792065786365656465640000600082015250565b600061193a601e83611281565b915061194582611904565b602082019050919050565b600060208201905081810360008301526119698161192d565b9050919050565b7f476f6f64546f6b656e3a20726563697069656e747320616e6420616d6f756e7460008201527f73206c656e677468206d69736d61746368000000000000000000000000000000602082015250565b60006119cc603183611281565b91506119d782611970565b604082019050919050565b600060208201905081810360008301526119fb816119bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611a3c8261139a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a6e57611a6d6118a1565b5b600182019050919050565b6000606082019050611a8e60008301866117d7565b611a9b6020830185611446565b611aa86040830184611446565b94935050505056fea26469706673582212207f0d6472e20ead5c98e47d7dfcc4f80b543ebb76ad438898e512b6d2ab35f58564736f6c63430008140033