0x608060405234801562000010575f80fd5b506040518060400160405280600581526020017f46454c49430000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f466300000000000000000000000000000000000000000000000000000000000081525081600390816200008e91906200065a565b508060049081620000a091906200065a565b5050505f60055f6101000a81548160ff021916908315150217905550620000dc620000d06200012160201b60201c565b6200012860201b60201c565b6200011b33620000f1620001ed60201b60201c565b600a620000ff9190620008c7565b620186a06200010f919062000917565b620001f560201b60201c565b62000ab3565b5f33905090565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025d90620009bf565b60405180910390fd5b620002795f83836200035a60201b60201c565b8060025f8282546200028c9190620009df565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200033b919062000a2a565b60405180910390a3620003565f83836200038260201b60201c565b5050565b6200036a6200038760201b60201c565b6200037d838383620003dc60201b60201c565b505050565b505050565b62000397620003e160201b60201c565b15620003da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003d19062000a93565b60405180910390fd5b565b505050565b5f60055f9054906101000a900460ff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200047257607f821691505b6020821081036200048857620004876200042d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620004ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004af565b620004f88683620004af565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620005426200053c620005368462000510565b62000519565b62000510565b9050919050565b5f819050919050565b6200055d8362000522565b620005756200056c8262000549565b848454620004bb565b825550505050565b5f90565b6200058b6200057d565b6200059881848462000552565b505050565b5b81811015620005bf57620005b35f8262000581565b6001810190506200059e565b5050565b601f8211156200060e57620005d8816200048e565b620005e384620004a0565b81016020851015620005f3578190505b6200060b6200060285620004a0565b8301826200059d565b50505b505050565b5f82821c905092915050565b5f620006305f198460080262000613565b1980831691505092915050565b5f6200064a83836200061f565b9150826002028217905092915050565b6200066582620003f6565b67ffffffffffffffff81111562000681576200068062000400565b5b6200068d82546200045a565b6200069a828285620005c3565b5f60209050601f831160018114620006d0575f8415620006bb578287015190505b620006c785826200063d565b86555062000736565b601f198416620006e0866200048e565b5f5b828110156200070957848901518255600182019150602085019450602081019050620006e2565b8683101562000729578489015162000725601f8916826200061f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620007c857808604811115620007a0576200079f6200073e565b5b6001851615620007b05780820291505b8081029050620007c0856200076b565b945062000780565b94509492505050565b5f82620007e25760019050620008b4565b81620007f1575f9050620008b4565b81600181146200080a576002811462000815576200084b565b6001915050620008b4565b60ff8411156200082a57620008296200073e565b5b8360020a9150848211156200084457620008436200073e565b5b50620008b4565b5060208310610133831016604e8410600b8410161715620008855782820a9050838111156200087f576200087e6200073e565b5b620008b4565b62000894848484600162000777565b92509050818404811115620008ae57620008ad6200073e565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620008d38262000510565b9150620008e083620008bb565b92506200090f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007d1565b905092915050565b5f620009238262000510565b9150620009308362000510565b9250828202620009408162000510565b915082820484148315176200095a57620009596200073e565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620009a7601f8362000961565b9150620009b48262000971565b602082019050919050565b5f6020820190508181035f830152620009d88162000999565b9050919050565b5f620009eb8262000510565b9150620009f88362000510565b925082820190508082111562000a135762000a126200073e565b5b92915050565b62000a248162000510565b82525050565b5f60208201905062000a3f5f83018462000a19565b92915050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f62000a7b60108362000961565b915062000a888262000a45565b602082019050919050565b5f6020820190508181035f83015262000aac8162000a6d565b9050919050565b611db08062000ac15f395ff3fe608060405234801561000f575f80fd5b506004361061012a575f3560e01c806370a08231116100ab57806395d89b411161006f57806395d89b41146102f6578063a457c2d714610314578063a9059cbb14610344578063dd62ed3e14610374578063f2fde38b146103a45761012a565b806370a0823114610278578063715018a6146102a857806379cc6790146102b25780638456cb59146102ce5780638da5cb5b146102d85761012a565b806339509351116100f257806339509351146101e85780633f4ba83a1461021857806340c10f191461022257806342966c681461023e5780635c975abb1461025a5761012a565b806306fdde031461012e578063095ea7b31461014c57806318160ddd1461017c57806323b872dd1461019a578063313ce567146101ca575b5f80fd5b6101366103c0565b604051610143919061132d565b60405180910390f35b610166600480360381019061016191906113de565b610450565b6040516101739190611436565b60405180910390f35b610184610472565b604051610191919061145e565b60405180910390f35b6101b460048036038101906101af9190611477565b61047b565b6040516101c19190611436565b60405180910390f35b6101d26104a9565b6040516101df91906114e2565b60405180910390f35b61020260048036038101906101fd91906113de565b6104b1565b60405161020f9190611436565b60405180910390f35b6102206104e7565b005b61023c600480360381019061023791906113de565b6104f9565b005b610258600480360381019061025391906114fb565b61050f565b005b610262610523565b60405161026f9190611436565b60405180910390f35b610292600480360381019061028d9190611526565b610538565b60405161029f919061145e565b60405180910390f35b6102b061057d565b005b6102cc60048036038101906102c791906113de565b610590565b005b6102d66105b0565b005b6102e06105c2565b6040516102ed9190611560565b60405180910390f35b6102fe6105eb565b60405161030b919061132d565b60405180910390f35b61032e600480360381019061032991906113de565b61067b565b60405161033b9190611436565b60405180910390f35b61035e600480360381019061035991906113de565b6106f0565b60405161036b9190611436565b60405180910390f35b61038e60048036038101906103899190611579565b610712565b60405161039b919061145e565b60405180910390f35b6103be60048036038101906103b99190611526565b610794565b005b6060600380546103cf906115e4565b80601f01602080910402602001604051908101604052809291908181526020018280546103fb906115e4565b80156104465780601f1061041d57610100808354040283529160200191610446565b820191905f5260205f20905b81548152906001019060200180831161042957829003601f168201915b5050505050905090565b5f8061045a610816565b905061046781858561081d565b600191505092915050565b5f600254905090565b5f80610485610816565b90506104928582856109e0565b61049d858585610a6b565b60019150509392505050565b5f6012905090565b5f806104bb610816565b90506104dc8185856104cd8589610712565b6104d79190611641565b61081d565b600191505092915050565b6104ef610cd7565b6104f7610d55565b565b610501610cd7565b61050b8282610db6565b5050565b61052061051a610816565b82610f04565b50565b5f60055f9054906101000a900460ff16905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610585610cd7565b61058e5f6110c7565b565b6105a28261059c610816565b836109e0565b6105ac8282610f04565b5050565b6105b8610cd7565b6105c061118c565b565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546105fa906115e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610626906115e4565b80156106715780601f1061064857610100808354040283529160200191610671565b820191905f5260205f20905b81548152906001019060200180831161065457829003601f168201915b5050505050905090565b5f80610685610816565b90505f6106928286610712565b9050838110156106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce906116e4565b60405180910390fd5b6106e4828686840361081d565b60019250505092915050565b5f806106fa610816565b9050610707818585610a6b565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61079c610cd7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361080a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080190611772565b60405180910390fd5b610813816110c7565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290611800565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f09061188e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109d3919061145e565b60405180910390a3505050565b5f6109eb8484610712565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a655781811015610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e906118f6565b60405180910390fd5b610a64848484840361081d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad090611984565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90611a12565b60405180910390fd5b610b528383836111ee565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90611aa0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610cbe919061145e565b60405180910390a3610cd1848484611206565b50505050565b610cdf610816565b73ffffffffffffffffffffffffffffffffffffffff16610cfd6105c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90611b08565b60405180910390fd5b565b610d5d61120b565b5f60055f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610d9f610816565b604051610dac9190611560565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90611b70565b60405180910390fd5b610e2f5f83836111ee565b8060025f828254610e409190611641565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610eed919061145e565b60405180910390a3610f005f8383611206565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990611bfe565b60405180910390fd5b610f7d825f836111ee565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790611c8c565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110af919061145e565b60405180910390a36110c2835f84611206565b505050565b5f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611194611254565b600160055f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111d7610816565b6040516111e49190611560565b60405180910390a1565b6111f6611254565b61120183838361129e565b505050565b505050565b611213610523565b611252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124990611cf4565b60405180910390fd5b565b61125c610523565b1561129c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129390611d5c565b60405180910390fd5b565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156112da5780820151818401526020810190506112bf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6112ff826112a3565b61130981856112ad565b93506113198185602086016112bd565b611322816112e5565b840191505092915050565b5f6020820190508181035f83015261134581846112f5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61137a82611351565b9050919050565b61138a81611370565b8114611394575f80fd5b50565b5f813590506113a581611381565b92915050565b5f819050919050565b6113bd816113ab565b81146113c7575f80fd5b50565b5f813590506113d8816113b4565b92915050565b5f80604083850312156113f4576113f361134d565b5b5f61140185828601611397565b9250506020611412858286016113ca565b9150509250929050565b5f8115159050919050565b6114308161141c565b82525050565b5f6020820190506114495f830184611427565b92915050565b611458816113ab565b82525050565b5f6020820190506114715f83018461144f565b92915050565b5f805f6060848603121561148e5761148d61134d565b5b5f61149b86828701611397565b93505060206114ac86828701611397565b92505060406114bd868287016113ca565b9150509250925092565b5f60ff82169050919050565b6114dc816114c7565b82525050565b5f6020820190506114f55f8301846114d3565b92915050565b5f602082840312156115105761150f61134d565b5b5f61151d848285016113ca565b91505092915050565b5f6020828403121561153b5761153a61134d565b5b5f61154884828501611397565b91505092915050565b61155a81611370565b82525050565b5f6020820190506115735f830184611551565b92915050565b5f806040838503121561158f5761158e61134d565b5b5f61159c85828601611397565b92505060206115ad85828601611397565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806115fb57607f821691505b60208210810361160e5761160d6115b7565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61164b826113ab565b9150611656836113ab565b925082820190508082111561166e5761166d611614565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6116ce6025836112ad565b91506116d982611674565b604082019050919050565b5f6020820190508181035f8301526116fb816116c2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61175c6026836112ad565b915061176782611702565b604082019050919050565b5f6020820190508181035f83015261178981611750565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6117ea6024836112ad565b91506117f582611790565b604082019050919050565b5f6020820190508181035f830152611817816117de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6118786022836112ad565b91506118838261181e565b604082019050919050565b5f6020820190508181035f8301526118a58161186c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6118e0601d836112ad565b91506118eb826118ac565b602082019050919050565b5f6020820190508181035f83015261190d816118d4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61196e6025836112ad565b915061197982611914565b604082019050919050565b5f6020820190508181035f83015261199b81611962565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6119fc6023836112ad565b9150611a07826119a2565b604082019050919050565b5f6020820190508181035f830152611a29816119f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f611a8a6026836112ad565b9150611a9582611a30565b604082019050919050565b5f6020820190508181035f830152611ab781611a7e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611af26020836112ad565b9150611afd82611abe565b602082019050919050565b5f6020820190508181035f830152611b1f81611ae6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f611b5a601f836112ad565b9150611b6582611b26565b602082019050919050565b5f6020820190508181035f830152611b8781611b4e565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611be86021836112ad565b9150611bf382611b8e565b604082019050919050565b5f6020820190508181035f830152611c1581611bdc565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f611c766022836112ad565b9150611c8182611c1c565b604082019050919050565b5f6020820190508181035f830152611ca381611c6a565b9050919050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f611cde6014836112ad565b9150611ce982611caa565b602082019050919050565b5f6020820190508181035f830152611d0b81611cd2565b9050919050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f611d466010836112ad565b9150611d5182611d12565b602082019050919050565b5f6020820190508181035f830152611d7381611d3a565b905091905056fea2646970667358221220017c407b354d2f87ceadd28f582f577289327d77f91c2b2ba9fe39d440cca0d164736f6c63430008140033