0x60806040523480156200001157600080fd5b5060405162001c3338038062001c338339818101604052810190620000379190620001ae565b81600290805190602001906200004f9291906200008c565b508060039080519060200190620000689291906200008c565b50620000796200008760201b60201c565b600081905550505062000391565b600090565b8280546200009a90620002b6565b90600052602060002090601f016020900481019282620000be57600085556200010a565b82601f10620000d957805160ff19168380011785556200010a565b828001600101855582156200010a579182015b8281111562000109578251825591602001919060010190620000ec565b5b5090506200011991906200011d565b5090565b5b80821115620001385760008160009055506001016200011e565b5090565b6000620001536200014d846200024a565b62000221565b9050828152602081018484840111156200016c57600080fd5b6200017984828562000280565b509392505050565b600082601f8301126200019357600080fd5b8151620001a58482602086016200013c565b91505092915050565b60008060408385031215620001c257600080fd5b600083015167ffffffffffffffff811115620001dd57600080fd5b620001eb8582860162000181565b925050602083015167ffffffffffffffff8111156200020957600080fd5b620002178582860162000181565b9150509250929050565b60006200022d62000240565b90506200023b8282620002ec565b919050565b6000604051905090565b600067ffffffffffffffff82111562000268576200026762000351565b5b620002738262000380565b9050602081019050919050565b60005b83811015620002a057808201518184015260208101905062000283565b83811115620002b0576000848401525b50505050565b60006002820490506001821680620002cf57607f821691505b60208210811415620002e657620002e562000322565b5b50919050565b620002f78262000380565b810181811067ffffffffffffffff8211171562000319576200031862000351565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61189280620003a16000396000f3fe6080604052600436106100dd5760003560e01c80636352211e1161007f578063a22cb46511610059578063a22cb465146102ab578063b88d4fde146102d4578063c87b56dd146102f0578063e985e9c51461032d576100dd565b80636352211e1461020657806370a082311461024357806395d89b4114610280576100dd565b8063095ea7b3116100bb578063095ea7b31461018757806318160ddd146101a357806323b872dd146101ce57806342842e0e146101ea576100dd565b806301ffc9a7146100e257806306fdde031461011f578063081812fc1461014a575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190611358565b61036a565b604051610116919061152e565b60405180910390f35b34801561012b57600080fd5b506101346103fc565b6040516101419190611549565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c91906113aa565b61048e565b60405161017e91906114c7565b60405180910390f35b6101a1600480360381019061019c919061131c565b6104ec565b005b3480156101af57600080fd5b506101b86104fc565b6040516101c5919061156b565b60405180910390f35b6101e860048036038101906101e39190611216565b610513565b005b61020460048036038101906101ff9190611216565b6107d7565b005b34801561021257600080fd5b5061022d600480360381019061022891906113aa565b6107f7565b60405161023a91906114c7565b60405180910390f35b34801561024f57600080fd5b5061026a600480360381019061026591906111b1565b610809565b604051610277919061156b565b60405180910390f35b34801561028c57600080fd5b506102956108a1565b6040516102a29190611549565b60405180910390f35b3480156102b757600080fd5b506102d260048036038101906102cd91906112e0565b610933565b005b6102ee60048036038101906102e99190611265565b610a3e565b005b3480156102fc57600080fd5b50610317600480360381019061031291906113aa565b610a90565b6040516103249190611549565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906111da565b610b0e565b604051610361919061152e565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461040b906116ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610437906116ff565b80156104845780601f1061045957610100808354040283529160200191610484565b820191906000526020600020905b81548152906001019060200180831161046757829003601f168201915b5050505050905090565b600061049982610ba2565b6104ae576104ad63cf4700e460e01b610c1c565b5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6104f882826001610c26565b5050565b6000610506610d55565b6001546000540303905090565b600061051e82610d5a565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105935761059263a114810060e01b610c1c565b5b60008061059f84610e56565b915091506105b581876105b0610e7d565b610e85565b6105e0576105ca866105c5610e7d565b610b0e565b6105df576105de6359c896be60e01b610c1c565b5b5b6105ed8686866001610ec9565b80156105f857600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506106c6856106a2888887610ecf565b7c020000000000000000000000000000000000000000000000000000000017610ef7565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416141561074e57600060018501905060006004600083815260200190815260200160002054141561074c57600054811461074b578360046000838152602001908152602001600020819055505b5b505b600073ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460008114156107c1576107c063ea553b3460e01b610c1c565b5b6107ce8787876001610f22565b50505050505050565b6107f283838360405180602001604052806000815250610a3e565b505050565b600061080282610d5a565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108505761084f638f4eb60460e01b610c1c565b5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6060600380546108b0906116ff565b80601f01602080910402602001604051908101604052809291908181526020018280546108dc906116ff565b80156109295780601f106108fe57610100808354040283529160200191610929565b820191906000526020600020905b81548152906001019060200180831161090c57829003601f168201915b5050505050905090565b8060076000610940610e7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166109ed610e7d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a32919061152e565b60405180910390a35050565b610a49848484610513565b60008373ffffffffffffffffffffffffffffffffffffffff163b14610a8a57610a7484848484610f28565b610a8957610a8863d1a57ed660e01b610c1c565b5b5b50505050565b6060610a9b82610ba2565b610ab057610aaf63a14c4b5060e01b610c1c565b5b6000610aba611067565b9050600081511415610adb5760405180602001604052806000815250610b06565b80610ae58461107e565b604051602001610af69291906114a3565b6040516020818303038152906040525b915050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081610bad610d55565b11610c1757600054821015610c165760005b600060046000858152602001908152602001600020549150811415610bef5782610be8906116d5565b9250610bbf565b60007c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b8060005260046000fd5b6000610c31836107f7565b9050818015610c7357508073ffffffffffffffffffffffffffffffffffffffff16610c5a610e7d565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c9f57610c8981610c84610e7d565b610b0e565b610c9e57610c9d63cfb3b94260e01b610c1c565b5b5b836006600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b600090565b600081610d65610d55565b11610e4057600460008381526020019081526020016000205490506000811415610e12576000548210610da357610da263df2d9b4260e01b610c1c565b5b5b60046000836001900393508381526020019081526020016000205490506000811415610dcf57610e0d565b60007c010000000000000000000000000000000000000000000000000000000082161415610dfc57610e51565b610e0c63df2d9b4260e01b610c1c565b5b610da4565b60007c010000000000000000000000000000000000000000000000000000000082161415610e3f57610e51565b5b610e5063df2d9b4260e01b610c1c565b5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8610ee68686846110d7565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02610f4e610e7d565b8786866040518563ffffffff1660e01b8152600401610f7094939291906114e2565b602060405180830381600087803b158015610f8a57600080fd5b505af1925050508015610fbb57506040513d601f19601f82011682018060405250810190610fb89190611381565b60015b611014573d8060008114610feb576040519150601f19603f3d011682016040523d82523d6000602084013e610ff0565b606091505b5060008151141561100c5761100b63d1a57ed660e01b610c1c565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052806000815250905090565b606060a060405101806040526020810391506000825281835b6001156110c257600184039350600a81066030018453600a81049050806110bd576110c2565b611097565b50828103602084039350808452505050919050565b60009392505050565b60006110f36110ee846115ab565b611586565b90508281526020810184848401111561110b57600080fd5b611116848285611693565b509392505050565b60008135905061112d81611800565b92915050565b60008135905061114281611817565b92915050565b6000813590506111578161182e565b92915050565b60008151905061116c8161182e565b92915050565b600082601f83011261118357600080fd5b81356111938482602086016110e0565b91505092915050565b6000813590506111ab81611845565b92915050565b6000602082840312156111c357600080fd5b60006111d18482850161111e565b91505092915050565b600080604083850312156111ed57600080fd5b60006111fb8582860161111e565b925050602061120c8582860161111e565b9150509250929050565b60008060006060848603121561122b57600080fd5b60006112398682870161111e565b935050602061124a8682870161111e565b925050604061125b8682870161119c565b9150509250925092565b6000806000806080858703121561127b57600080fd5b60006112898782880161111e565b945050602061129a8782880161111e565b93505060406112ab8782880161119c565b925050606085013567ffffffffffffffff8111156112c857600080fd5b6112d487828801611172565b91505092959194509250565b600080604083850312156112f357600080fd5b60006113018582860161111e565b925050602061131285828601611133565b9150509250929050565b6000806040838503121561132f57600080fd5b600061133d8582860161111e565b925050602061134e8582860161119c565b9150509250929050565b60006020828403121561136a57600080fd5b600061137884828501611148565b91505092915050565b60006020828403121561139357600080fd5b60006113a18482850161115d565b91505092915050565b6000602082840312156113bc57600080fd5b60006113ca8482850161119c565b91505092915050565b6113dc8161161f565b82525050565b6113eb81611631565b82525050565b60006113fc826115dc565b61140681856115f2565b93506114168185602086016116a2565b61141f816117ef565b840191505092915050565b6000611435826115e7565b61143f8185611603565b935061144f8185602086016116a2565b611458816117ef565b840191505092915050565b600061146e826115e7565b6114788185611614565b93506114888185602086016116a2565b80840191505092915050565b61149d81611689565b82525050565b60006114af8285611463565b91506114bb8284611463565b91508190509392505050565b60006020820190506114dc60008301846113d3565b92915050565b60006080820190506114f760008301876113d3565b61150460208301866113d3565b6115116040830185611494565b818103606083015261152381846113f1565b905095945050505050565b600060208201905061154360008301846113e2565b92915050565b60006020820190508181036000830152611563818461142a565b905092915050565b60006020820190506115806000830184611494565b92915050565b60006115906115a1565b905061159c8282611731565b919050565b6000604051905090565b600067ffffffffffffffff8211156115c6576115c56117c0565b5b6115cf826117ef565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061162a82611669565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156116c05780820151818401526020810190506116a5565b838111156116cf576000848401525b50505050565b60006116e082611689565b915060008214156116f4576116f3611762565b5b600182039050919050565b6000600282049050600182168061171757607f821691505b6020821081141561172b5761172a611791565b5b50919050565b61173a826117ef565b810181811067ffffffffffffffff82111715611759576117586117c0565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6118098161161f565b811461181457600080fd5b50565b61182081611631565b811461182b57600080fd5b50565b6118378161163d565b811461184257600080fd5b50565b61184e81611689565b811461185957600080fd5b5056fea2646970667358221220ead8a9992d1ef5fd1bff672f3719a603f52c55d919ae4432b84fa0713a4403ba64736f6c634300080400330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000