60806040523480156200001157600080fd5b506040516200261638038062002616833981810160405281019062000037919062000327565b6040518060400160405280601081526020017f43727970746f2044657620546f6b656e000000000000000000000000000000008152506040518060400160405280600281526020017f43440000000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb9291906200020d565b508060049080519060200190620000d49291906200020d565b505050620000f7620000eb6200013f60201b60201c565b6200014760201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003be565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021b9062000388565b90600052602060002090601f0160209004810192826200023f57600085556200028b565b82601f106200025a57805160ff19168380011785556200028b565b828001600101855582156200028b579182015b828111156200028a5782518255916020019190600101906200026d565b5b5090506200029a91906200029e565b5090565b5b80821115620002b95760008160009055506001016200029f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002ef82620002c2565b9050919050565b6200030181620002e2565b81146200030d57600080fd5b50565b6000815190506200032181620002f6565b92915050565b60006020828403121562000340576200033f620002bd565b5b6000620003508482850162000310565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003a157607f821691505b60208210811415620003b857620003b762000359565b5b50919050565b61224880620003ce6000396000f3fe60806040526004361061012e5760003560e01c80635f3690af116100ab57806395d89b411161006f57806395d89b41146103da578063a0712d6814610405578063a457c2d714610421578063a9059cbb1461045e578063dd62ed3e1461049b578063f2fde38b146104d857610135565b80635f3690af146102f357806370a0823114610330578063715018a61461036d5780637ff9b596146103845780638da5cb5b146103af57610135565b8063313ce567116100f2578063313ce56714610232578063395093511461025d5780633ccfd60b1461029a5780634e71d92d146102b15780635afcc2f5146102c857610135565b806306fdde0314610137578063095ea7b31461016257806318160ddd1461019f57806323b872dd146101ca5780632ab4d0521461020757610135565b3661013557005b005b34801561014357600080fd5b5061014c610501565b604051610159919061155f565b60405180910390f35b34801561016e57600080fd5b506101896004803603810190610184919061161a565b610593565b6040516101969190611675565b60405180910390f35b3480156101ab57600080fd5b506101b46105b6565b6040516101c1919061169f565b60405180910390f35b3480156101d657600080fd5b506101f160048036038101906101ec91906116ba565b6105c0565b6040516101fe9190611675565b60405180910390f35b34801561021357600080fd5b5061021c6105ef565b604051610229919061169f565b60405180910390f35b34801561023e57600080fd5b506102476105fd565b6040516102549190611729565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f919061161a565b610606565b6040516102919190611675565b60405180910390f35b3480156102a657600080fd5b506102af61063d565b005b3480156102bd57600080fd5b506102c6610707565b005b3480156102d457600080fd5b506102dd610978565b6040516102ea919061169f565b60405180910390f35b3480156102ff57600080fd5b5061031a60048036038101906103159190611744565b610984565b6040516103279190611675565b60405180910390f35b34801561033c57600080fd5b5061035760048036038101906103529190611771565b6109a4565b604051610364919061169f565b60405180910390f35b34801561037957600080fd5b506103826109ec565b005b34801561039057600080fd5b50610399610a00565b6040516103a6919061169f565b60405180910390f35b3480156103bb57600080fd5b506103c4610a0a565b6040516103d191906117ad565b60405180910390f35b3480156103e657600080fd5b506103ef610a34565b6040516103fc919061155f565b60405180910390f35b61041f600480360381019061041a9190611744565b610ac6565b005b34801561042d57600080fd5b506104486004803603810190610443919061161a565b610ba5565b6040516104559190611675565b60405180910390f35b34801561046a57600080fd5b506104856004803603810190610480919061161a565b610c1c565b6040516104929190611675565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906117c8565b610c3f565b6040516104cf919061169f565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190611771565b610cc6565b005b60606003805461051090611837565b80601f016020809104026020016040519081016040528092919081815260200182805461053c90611837565b80156105895780601f1061055e57610100808354040283529160200191610589565b820191906000526020600020905b81548152906001019060200180831161056c57829003601f168201915b5050505050905090565b60008061059e610d4a565b90506105ab818585610d52565b600191505092915050565b6000600254905090565b6000806105cb610d4a565b90506105d8858285610f1d565b6105e3858585610fa9565b60019150509392505050565b69021e19e0c9bab240000081565b60006012905090565b600080610611610d4a565b90506106328185856106238589610c3f565b61062d9190611898565b610d52565b600191505092915050565b610645611221565b600061064f610a0a565b9050600047905060008273ffffffffffffffffffffffffffffffffffffffff168260405161067c9061191f565b60006040518083038185875af1925050503d80600081146106b9576040519150601f19603f3d011682016040523d82523d6000602084013e6106be565b606091505b5050905080610702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f990611980565b60405180910390fd5b505050565b60003390506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161076991906117ad565b602060405180830381865afa158015610786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107aa91906119b5565b9050600081116107ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e690611a54565b60405180910390fd5b6000805b82811015610912576000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986846040518363ffffffff1660e01b815260040161085a929190611a74565b602060405180830381865afa158015610877573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089b91906119b5565b90506007600082815260200190815260200160002060009054906101000a900460ff166108fe576001836108cf9190611898565b925060016007600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50808061090a90611a9d565b9150506107f3565b5060008111610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90611b58565b60405180910390fd5b61097333678ac7230489e800008361096e9190611b78565b61129f565b505050565b678ac7230489e8000081565b60076020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109f4611221565b6109fe60006113f6565b565b6509184e72a00081565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a4390611837565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6f90611837565b8015610abc5780601f10610a9157610100808354040283529160200191610abc565b820191906000526020600020905b815481529060010190602001808311610a9f57829003601f168201915b5050505050905090565b6000816509184e72a000610ada9190611b78565b905080341015610b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1690611c1e565b60405180910390fd5b6000670de0b6b3a764000083610b359190611b78565b905069021e19e0c9bab240000081610b4b6105b6565b610b559190611898565b1115610b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8d90611cb0565b60405180910390fd5b610ba0338261129f565b505050565b600080610bb0610d4a565b90506000610bbe8286610c3f565b905083811015610c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfa90611d42565b60405180910390fd5b610c108286868403610d52565b60019250505092915050565b600080610c27610d4a565b9050610c34818585610fa9565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610cce611221565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590611dd4565b60405180910390fd5b610d47816113f6565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990611e66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990611ef8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f10919061169f565b60405180910390a3505050565b6000610f298484610c3f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fa35781811015610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90611f64565b60405180910390fd5b610fa28484848403610d52565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090611ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108090612088565b60405180910390fd5b6110948383836114bc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561111a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111119061211a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611208919061169f565b60405180910390a361121b8484846114c1565b50505050565b611229610d4a565b73ffffffffffffffffffffffffffffffffffffffff16611247610a0a565b73ffffffffffffffffffffffffffffffffffffffff161461129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490612186565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906121f2565b60405180910390fd5b61131b600083836114bc565b806002600082825461132d9190611898565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113de919061169f565b60405180910390a36113f2600083836114c1565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156115005780820151818401526020810190506114e5565b8381111561150f576000848401525b50505050565b6000601f19601f8301169050919050565b6000611531826114c6565b61153b81856114d1565b935061154b8185602086016114e2565b61155481611515565b840191505092915050565b600060208201905081810360008301526115798184611526565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115b182611586565b9050919050565b6115c1816115a6565b81146115cc57600080fd5b50565b6000813590506115de816115b8565b92915050565b6000819050919050565b6115f7816115e4565b811461160257600080fd5b50565b600081359050611614816115ee565b92915050565b6000806040838503121561163157611630611581565b5b600061163f858286016115cf565b925050602061165085828601611605565b9150509250929050565b60008115159050919050565b61166f8161165a565b82525050565b600060208201905061168a6000830184611666565b92915050565b611699816115e4565b82525050565b60006020820190506116b46000830184611690565b92915050565b6000806000606084860312156116d3576116d2611581565b5b60006116e1868287016115cf565b93505060206116f2868287016115cf565b925050604061170386828701611605565b9150509250925092565b600060ff82169050919050565b6117238161170d565b82525050565b600060208201905061173e600083018461171a565b92915050565b60006020828403121561175a57611759611581565b5b600061176884828501611605565b91505092915050565b60006020828403121561178757611786611581565b5b6000611795848285016115cf565b91505092915050565b6117a7816115a6565b82525050565b60006020820190506117c2600083018461179e565b92915050565b600080604083850312156117df576117de611581565b5b60006117ed858286016115cf565b92505060206117fe858286016115cf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061184f57607f821691505b6020821081141561186357611862611808565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006118a3826115e4565b91506118ae836115e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118e3576118e2611869565b5b828201905092915050565b600081905092915050565b50565b60006119096000836118ee565b9150611914826118f9565b600082019050919050565b600061192a826118fc565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b600061196a6014836114d1565b915061197582611934565b602082019050919050565b600060208201905081810360008301526119998161195d565b9050919050565b6000815190506119af816115ee565b92915050565b6000602082840312156119cb576119ca611581565b5b60006119d9848285016119a0565b91505092915050565b7f596f7520646f6e74206f776e20616e792043727970746f20446576204e46542760008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a3e6021836114d1565b9150611a49826119e2565b604082019050919050565b60006020820190508181036000830152611a6d81611a31565b9050919050565b6000604082019050611a89600083018561179e565b611a966020830184611690565b9392505050565b6000611aa8826115e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611adb57611ada611869565b5b600182019050919050565b7f596f75206861766520616c726561647920636c61696d656420616c6c2074686560008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b6000611b426027836114d1565b9150611b4d82611ae6565b604082019050919050565b60006020820190508181036000830152611b7181611b35565b9050919050565b6000611b83826115e4565b9150611b8e836115e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611bc757611bc6611869565b5b828202905092915050565b7f45746865722073656e7420697320696e636f7272656374000000000000000000600082015250565b6000611c086017836114d1565b9150611c1382611bd2565b602082019050919050565b60006020820190508181036000830152611c3781611bfb565b9050919050565b7f4578636565647320746865206d617820746f74616c20737570706c792061766160008201527f696c61626c652e00000000000000000000000000000000000000000000000000602082015250565b6000611c9a6027836114d1565b9150611ca582611c3e565b604082019050919050565b60006020820190508181036000830152611cc981611c8d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611d2c6025836114d1565b9150611d3782611cd0565b604082019050919050565b60006020820190508181036000830152611d5b81611d1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611dbe6026836114d1565b9150611dc982611d62565b604082019050919050565b60006020820190508181036000830152611ded81611db1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611e506024836114d1565b9150611e5b82611df4565b604082019050919050565b60006020820190508181036000830152611e7f81611e43565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611ee26022836114d1565b9150611eed82611e86565b604082019050919050565b60006020820190508181036000830152611f1181611ed5565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611f4e601d836114d1565b9150611f5982611f18565b602082019050919050565b60006020820190508181036000830152611f7d81611f41565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611fe06025836114d1565b9150611feb82611f84565b604082019050919050565b6000602082019050818103600083015261200f81611fd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006120726023836114d1565b915061207d82612016565b604082019050919050565b600060208201905081810360008301526120a181612065565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121046026836114d1565b915061210f826120a8565b604082019050919050565b60006020820190508181036000830152612133816120f7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006121706020836114d1565b915061217b8261213a565b602082019050919050565b6000602082019050818103600083015261219f81612163565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006121dc601f836114d1565b91506121e7826121a6565b602082019050919050565b6000602082019050818103600083015261220b816121cf565b905091905056fea264697066735822122020520e07ce7c134d9173ebf38ec8e62d2ea4b7da0f0e7ee6a08e90b59407170a64736f6c634300080a0033000000000000000000000000f51b941573b460587724a803db7671c4545c8ede