0x60806040523480156200001157600080fd5b506040518060400160405280601a81526020017f47697665204261636b204d7920456d696c6961207265626f726e0000000000008152506040518060400160405280600681526020017f454d494c49410000000000000000000000000000000000000000000000000000815250816002908051906020019062000096929190620000d3565b508060039080519060200190620000af929190620000d3565b50620000c0620000ce60201b60201c565b6000819055505050620001e8565b600090565b828054620000e190620001b2565b90600052602060002090601f01602090048101928262000105576000855562000151565b82601f106200012057805160ff191683800117855562000151565b8280016001018555821562000151579182015b828111156200015057825182559160200191906001019062000133565b5b50905062000160919062000164565b5090565b5b808211156200017f57600081600090555060010162000165565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001cb57607f821691505b60208210811415620001e257620001e162000183565b5b50919050565b611a8080620001f86000396000f3fe6080604052600436106100e85760003560e01c80636352211e1161008a578063a22cb46511610059578063a22cb465146102d2578063b88d4fde146102fb578063c87b56dd14610317578063e985e9c514610354576100e8565b80636352211e1461021157806370a082311461024e57806395d89b411461028b578063a0712d68146102b6576100e8565b8063095ea7b3116100c6578063095ea7b31461019257806318160ddd146101ae57806323b872dd146101d957806342842e0e146101f5576100e8565b806301ffc9a7146100ed57806306fdde031461012a578063081812fc14610155575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f91906112f6565b610391565b604051610121919061133e565b60405180910390f35b34801561013657600080fd5b5061013f610423565b60405161014c91906113f2565b60405180910390f35b34801561016157600080fd5b5061017c6004803603810190610177919061144a565b6104b5565b60405161018991906114b8565b60405180910390f35b6101ac60048036038101906101a791906114ff565b610513565b005b3480156101ba57600080fd5b506101c3610523565b6040516101d0919061154e565b60405180910390f35b6101f360048036038101906101ee9190611569565b61053a565b005b61020f600480360381019061020a9190611569565b6107fe565b005b34801561021d57600080fd5b506102386004803603810190610233919061144a565b61081e565b60405161024591906114b8565b60405180910390f35b34801561025a57600080fd5b50610275600480360381019061027091906115bc565b610830565b604051610282919061154e565b60405180910390f35b34801561029757600080fd5b506102a06108c8565b6040516102ad91906113f2565b60405180910390f35b6102d060048036038101906102cb919061144a565b61095a565b005b3480156102de57600080fd5b506102f960048036038101906102f49190611615565b610967565b005b6103156004803603810190610310919061178a565b610a72565b005b34801561032357600080fd5b5061033e6004803603810190610339919061144a565b610ac4565b60405161034b91906113f2565b60405180910390f35b34801561036057600080fd5b5061037b6004803603810190610376919061180d565b610b42565b604051610388919061133e565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061041c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546104329061187c565b80601f016020809104026020016040519081016040528092919081815260200182805461045e9061187c565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104c082610bd6565b6104d5576104d463cf4700e460e01b610c50565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61051f82826001610c5a565b5050565b600061052d610d89565b6001546000540303905090565b600061054582610d8e565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ba576105b963a114810060e01b610c50565b5b6000806105c684610e8a565b915091506105dc81876105d7610eb1565b610eb9565b610607576105f1866105ec610eb1565b610b42565b610606576106056359c896be60e01b610c50565b5b5b6106148686866001610efd565b801561061f57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506106ed856106c9888887610f03565b7c020000000000000000000000000000000000000000000000000000000017610f2b565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610775576000600185019050600060046000838152602001908152602001600020541415610773576000548114610772578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460008114156107e8576107e763ea553b3460e01b610c50565b5b6107f58787876001610f56565b50505050505050565b61081983838360405180602001604052806000815250610a72565b505050565b600061082982610d8e565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561087757610876638f4eb60460e01b610c50565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6060600380546108d79061187c565b80601f01602080910402602001604051908101604052809291908181526020018280546109039061187c565b80156109505780601f1061092557610100808354040283529160200191610950565b820191906000526020600020905b81548152906001019060200180831161093357829003601f168201915b5050505050905090565b6109643382610f5c565b50565b8060076000610974610eb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610a21610eb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a66919061133e565b60405180910390a35050565b610a7d84848461053a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610abe57610aa8848484846110c2565b610abd57610abc63d1a57ed660e01b610c50565b5b5b50505050565b6060610acf82610bd6565b610ae457610ae363a14c4b5060e01b610c50565b5b6000610aee611201565b9050600081511415610b0f5760405180602001604052806000815250610b3a565b80610b1984611218565b604051602001610b2a9291906118ea565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610be1610d89565b11610c4b57600054821015610c4a5760005b600060046000858152602001908152602001600020549150811415610c235782610c1c9061193d565b9250610bf3565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610c658361081e565b9050818015610ca757508073ffffffffffffffffffffffffffffffffffffffff16610c8e610eb1565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610cd357610cbd81610cb8610eb1565b610b42565b610cd257610cd163cfb3b94260e01b610c50565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600090565b600081610d99610d89565b11610e7457600460008381526020019081526020016000205490506000811415610e46576000548210610dd757610dd663df2d9b4260e01b610c50565b5b5b60046000836001900393508381526020019081526020016000205490506000811415610e0357610e41565b60007c010000000000000000000000000000000000000000000000000000000082161415610e3057610e85565b610e4063df2d9b4260e01b610c50565b5b610dd8565b60007c010000000000000000000000000000000000000000000000000000000082161415610e7357610e85565b5b610e8463df2d9b4260e01b610c50565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610f1a868684611271565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000805490506000821415610f7c57610f7b63b562e8dd60e01b610c50565b5b610f896000848385610efd565b610fa983610f9a6000866000610f03565b610fa38561127a565b17610f2b565b6004600083815260200190815260200160002081905550600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff16169050600081141561106257611061632e07630060e01b610c50565b5b6000838301905060008390505b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a48181600101915081141561106f57816000819055505050506110bd6000848385610f56565b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026110e8610eb1565b8786866040518563ffffffff1660e01b815260040161110a94939291906119bc565b602060405180830381600087803b15801561112457600080fd5b505af192505050801561115557506040513d601f19601f820116820180604052508101906111529190611a1d565b60015b6111ae573d8060008114611185576040519150601f19603f3d011682016040523d82523d6000602084013e61118a565b606091505b506000815114156111a6576111a563d1a57ed660e01b610c50565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b60011561125c57600184039350600a81066030018453600a81049050806112575761125c565b611231565b50828103602084039350808452505050919050565b60009392505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6112d38161129e565b81146112de57600080fd5b50565b6000813590506112f0816112ca565b92915050565b60006020828403121561130c5761130b611294565b5b600061131a848285016112e1565b91505092915050565b60008115159050919050565b61133881611323565b82525050565b6000602082019050611353600083018461132f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611393578082015181840152602081019050611378565b838111156113a2576000848401525b50505050565b6000601f19601f8301169050919050565b60006113c482611359565b6113ce8185611364565b93506113de818560208601611375565b6113e7816113a8565b840191505092915050565b6000602082019050818103600083015261140c81846113b9565b905092915050565b6000819050919050565b61142781611414565b811461143257600080fd5b50565b6000813590506114448161141e565b92915050565b6000602082840312156114605761145f611294565b5b600061146e84828501611435565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114a282611477565b9050919050565b6114b281611497565b82525050565b60006020820190506114cd60008301846114a9565b92915050565b6114dc81611497565b81146114e757600080fd5b50565b6000813590506114f9816114d3565b92915050565b6000806040838503121561151657611515611294565b5b6000611524858286016114ea565b925050602061153585828601611435565b9150509250929050565b61154881611414565b82525050565b6000602082019050611563600083018461153f565b92915050565b60008060006060848603121561158257611581611294565b5b6000611590868287016114ea565b93505060206115a1868287016114ea565b92505060406115b286828701611435565b9150509250925092565b6000602082840312156115d2576115d1611294565b5b60006115e0848285016114ea565b91505092915050565b6115f281611323565b81146115fd57600080fd5b50565b60008135905061160f816115e9565b92915050565b6000806040838503121561162c5761162b611294565b5b600061163a858286016114ea565b925050602061164b85828601611600565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611697826113a8565b810181811067ffffffffffffffff821117156116b6576116b561165f565b5b80604052505050565b60006116c961128a565b90506116d5828261168e565b919050565b600067ffffffffffffffff8211156116f5576116f461165f565b5b6116fe826113a8565b9050602081019050919050565b82818337600083830152505050565b600061172d611728846116da565b6116bf565b9050828152602081018484840111156117495761174861165a565b5b61175484828561170b565b509392505050565b600082601f83011261177157611770611655565b5b813561178184826020860161171a565b91505092915050565b600080600080608085870312156117a4576117a3611294565b5b60006117b2878288016114ea565b94505060206117c3878288016114ea565b93505060406117d487828801611435565b925050606085013567ffffffffffffffff8111156117f5576117f4611299565b5b6118018782880161175c565b91505092959194509250565b6000806040838503121561182457611823611294565b5b6000611832858286016114ea565b9250506020611843858286016114ea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061189457607f821691505b602082108114156118a8576118a761184d565b5b50919050565b600081905092915050565b60006118c482611359565b6118ce81856118ae565b93506118de818560208601611375565b80840191505092915050565b60006118f682856118b9565b915061190282846118b9565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061194882611414565b9150600082141561195c5761195b61190e565b5b600182039050919050565b600081519050919050565b600082825260208201905092915050565b600061198e82611967565b6119988185611972565b93506119a8818560208601611375565b6119b1816113a8565b840191505092915050565b60006080820190506119d160008301876114a9565b6119de60208301866114a9565b6119eb604083018561153f565b81810360608301526119fd8184611983565b905095945050505050565b600081519050611a17816112ca565b92915050565b600060208284031215611a3357611a32611294565b5b6000611a4184828501611a08565b9150509291505056fea2646970667358221220cae5770783b654ce6a8fb7e69fb7e97eb5148d8a241821faaafac7b1228e7b7d64736f6c63430008080033