0x60806040523480156200001157600080fd5b50604051620024ca380380620024ca833981016040819052620000349162000134565b6200004160003362000093565b6200006d7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9293362000093565b600180546001600160a01b0319166001600160a01b039290921691909117905562000166565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000130576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620000ef3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000602082840312156200014757600080fd5b81516001600160a01b03811681146200015f57600080fd5b9392505050565b61235480620001766000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806391d14854116100b2578063d4568a4c11610081578063f160d36911610066578063f160d36914610290578063f5b541a6146102a3578063fa2c4984146102ca57600080fd5b8063d4568a4c1461026a578063d547741f1461027d57600080fd5b806391d1485414610205578063980c49bd1461023c578063a217fddf1461024f578063c8e1839a1461025757600080fd5b806346904840116100ee57806346904840146101a15780635bd3e940146101cc5780636e1a1e9e146101df5780637fde56da146101f257600080fd5b806301ffc9a714610120578063248a9ca3146101485780632f2ff15d1461017957806336568abe1461018e575b600080fd5b61013361012e3660046111b5565b6102dd565b60405190151581526020015b60405180910390f35b61016b6101563660046111f7565b60009081526020819052604090206001015490565b60405190815260200161013f565b61018c61018736600461122c565b610376565b005b61018c61019c36600461122c565b6103a1565b6001546101b4906001600160a01b031681565b6040516001600160a01b03909116815260200161013f565b6101336101da3660046111f7565b610432565b61018c6101ed3660046111f7565b61047c565b6101b46102003660046111f7565b610562565b61013361021336600461122c565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61018c61024a366004611258565b610578565b61016b600081565b61018c610265366004611258565b610725565b61018c610278366004611338565b6107da565b61018c61028b36600461122c565b610a49565b61018c61029e3660046113dc565b610a6f565b61016b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b61018c6102d8366004611338565b610ab6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061037057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103928133610c4d565b61039c8383610ccb565b505050565b6001600160a01b03811633146104245760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61042e8282610d69565b5050565b6000806104698360405180602001610449906111a8565b6020820181038252601f19601f8201166040525080519060200120610de8565b6001600160a01b03163b15159392505050565b60006104ac60008360405180602001610494906111a8565b601f1982820381018352601f90910116604052610e72565b6040517fc4d66de80000000000000000000000000000000000000000000000000000000081523060048201529091506001600160a01b0382169063c4d66de890602401600060405180830381600087803b15801561050957600080fd5b505af115801561051d573d6000803e3d6000fd5b50506040516001600160a01b03841681527f234cf33b32239d80b54161e2396c80cdeaf4d34161300e54d8bc01eb7c0ea5539250602001905060405180910390a15050565b60006103708260405180602001610449906111a8565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296105a38133610c4d565b60005a905060006105b388610562565b6040517f8f6f03320000000000000000000000000000000000000000000000000000000081529091506001600160a01b03821690638f6f033290610601908a908a908a908a906004016113f7565b6000604051808303816000875af1158015610620573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106489190810190611477565b506001546001600160a01b0380831691638f6f033291163a5a61066d8761520861153a565b610677919061154d565b6106819190611560565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260606044820152600060648201526084016000604051808303816000875af11580156106f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261071a9190810190611477565b505050505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296107508133610c4d565b61075986610562565b6001600160a01b0316638f6f0332868686866040518563ffffffff1660e01b815260040161078a94939291906113f7565b6000604051808303816000875af11580156107a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107d19190810190611477565b50505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296108058133610c4d565b60005a905086858114801561081957508084145b6108655760405162461bcd60e51b815260206004820152601560248201527f494e5055545f4c454e4754485f4d49534d415443480000000000000000000000604482015260640161041b565b60006108708b610562565b905060005b8281101561096957816001600160a01b0316638f6f03328c8c8481811061089e5761089e611577565b90506020020160208101906108b391906113dc565b8b8b858181106108c5576108c5611577565b905060200201358a8a868181106108de576108de611577565b90506020028101906108f0919061158d565b6040518563ffffffff1660e01b815260040161090f94939291906113f7565b6000604051808303816000875af115801561092e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109569190810190611477565b5080610961816115f2565b915050610875565b506001546001600160a01b0380831691638f6f033291163a5a61098e8861520861153a565b610998919061154d565b6109a29190611560565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260606044820152600060648201526084016000604051808303816000875af1158015610a13573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a3b9190810190611477565b505050505050505050505050565b600082815260208190526040902060010154610a658133610c4d565b61039c8383610d69565b6000610a7b8133610c4d565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610ae18133610c4d565b858481148015610af057508083145b610b3c5760405162461bcd60e51b815260206004820152601560248201527f494e5055545f4c454e4754485f4d49534d415443480000000000000000000000604482015260640161041b565b6000610b478a610562565b905060005b82811015610c4057816001600160a01b0316638f6f03328b8b84818110610b7557610b75611577565b9050602002016020810190610b8a91906113dc565b8a8a85818110610b9c57610b9c611577565b90506020020135898986818110610bb557610bb5611577565b9050602002810190610bc7919061158d565b6040518563ffffffff1660e01b8152600401610be694939291906113f7565b6000604051808303816000875af1158015610c05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c2d9190810190611477565b5080610c38816115f2565b915050610b4c565b5050505050505050505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661042e57610c89816001600160a01b03166014610f7f565b610c94836020610f7f565b604051602001610ca592919061160c565b60408051601f198184030181529082905262461bcd60e51b825261041b9160040161168d565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661042e576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055610d253390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff161561042e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b16602183015260358201859052605580830185905283518084039091018152607590920190925280519101206000905b9392505050565b60008084471015610ec55760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161041b565b8251600003610f165760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161041b565b8383516020850187f590506001600160a01b038116610f775760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161041b565b949350505050565b60606000610f8e836002611560565b610f9990600261153a565b67ffffffffffffffff811115610fb157610fb161143d565b6040519080825280601f01601f191660200182016040528015610fdb576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061101257611012611577565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061107557611075611577565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006110b1846002611560565b6110bc90600161153a565b90505b6001811115611159577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106110fd576110fd611577565b1a60f81b82828151811061111357611113611577565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93611152816116c0565b90506110bf565b508315610e6b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161041b565b610c47806116d883390190565b6000602082840312156111c757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610e6b57600080fd5b60006020828403121561120957600080fd5b5035919050565b80356001600160a01b038116811461122757600080fd5b919050565b6000806040838503121561123f57600080fd5b8235915061124f60208401611210565b90509250929050565b60008060008060006080868803121561127057600080fd5b8535945061128060208701611210565b935060408601359250606086013567ffffffffffffffff808211156112a457600080fd5b818801915088601f8301126112b857600080fd5b8135818111156112c757600080fd5b8960208285010111156112d957600080fd5b9699959850939650602001949392505050565b60008083601f8401126112fe57600080fd5b50813567ffffffffffffffff81111561131657600080fd5b6020830191508360208260051b850101111561133157600080fd5b9250929050565b60008060008060008060006080888a03121561135357600080fd5b87359650602088013567ffffffffffffffff8082111561137257600080fd5b61137e8b838c016112ec565b909850965060408a013591508082111561139757600080fd5b6113a38b838c016112ec565b909650945060608a01359150808211156113bc57600080fd5b506113c98a828b016112ec565b989b979a50959850939692959293505050565b6000602082840312156113ee57600080fd5b610e6b82611210565b6001600160a01b038516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561146e578181015183820152602001611456565b50506000910152565b60006020828403121561148957600080fd5b815167ffffffffffffffff808211156114a157600080fd5b818401915084601f8301126114b557600080fd5b8151818111156114c7576114c761143d565b604051601f8201601f19908116603f011681019083821181831017156114ef576114ef61143d565b8160405282815287602084870101111561150857600080fd5b611519836020830160208801611453565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561037057610370611524565b8181038181111561037057610370611524565b808202811582820484141761037057610370611524565b634e487b7160e01b600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126115c257600080fd5b83018035915067ffffffffffffffff8211156115dd57600080fd5b60200191503681900382131561133157600080fd5b6000600019820361160557611605611524565b5060010190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611644816017850160208801611453565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611681816028840160208801611453565b01602801949350505050565b60208152600082518060208401526116ac816040850160208701611453565b601f01601f19169190910160400192915050565b6000816116cf576116cf611524565b50600019019056fe608060405234801561001057600080fd5b50610c27806100206000396000f3fe60806040526004361061009a5760003560e01c80638da5cb5b11610069578063bc197c811161004e578063bc197c8114610207578063c4d66de81461024c578063f23a6e611461026c57600080fd5b80638da5cb5b146101825780638f6f0332146101da57600080fd5b80630851b5f4146100a6578063150b7a02146100c85780631626ba7e14610142578063880cdc311461016257600080fd5b366100a157005b600080fd5b3480156100b257600080fd5b506100c66100c13660046107ea565b6102b1565b005b3480156100d457600080fd5b5061010c6100e3366004610858565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b34801561014e57600080fd5b5061010c61015d3660046108c0565b61032a565b34801561016e57600080fd5b506100c661017d366004610907565b6103a1565b34801561018e57600080fd5b506000546101b59062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610139565b3480156101e657600080fd5b506101fa6101f5366004610929565b61043d565b60405161013991906109d4565b34801561021357600080fd5b5061010c610222366004610a87565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b34801561025857600080fd5b506100c6610267366004610907565b61059e565b34801561027857600080fd5b5061010c610287366004610b31565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b3330146103055760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064015b60405180910390fd5b806001836040516103169190610b96565b908152604051908190036020019020555050565b600060018260405161033c9190610b96565b908152602001604051809103902054421161037857507f1626ba7e0000000000000000000000000000000000000000000000000000000061039b565b507fffffffff000000000000000000000000000000000000000000000000000000005b92915050565b3330146103f05760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016102fc565b6000805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60005460609062010000900473ffffffffffffffffffffffffffffffffffffffff1633146104ad5760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f415554484f52495a454400000000000000000000000000000000000060448201526064016102fc565b60008573ffffffffffffffffffffffffffffffffffffffff168585856040516104d7929190610bb2565b60006040518083038185875af1925050503d8060008114610514576040519150601f19603f3d011682016040523d82523d6000602084013e610519565b606091505b50925090508061052d573d6000803e3d6000fd5b848673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7d2476ab50663f025cff0be85655bcf355f62768615c0c478f3cd5293f807365878760405161058d929190610bc2565b60405180910390a450949350505050565b600054610100900460ff16158080156105be5750600054600160ff909116105b806105d85750303b1580156105d8575060005460ff166001145b61064a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016102fc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561068b576000805461ff0019166101001790555b600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff166201000073ffffffffffffffffffffffffffffffffffffffff8516021790558015610716576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156107725761077261071a565b604052919050565b600082601f83011261078b57600080fd5b813567ffffffffffffffff8111156107a5576107a561071a565b6107b86020601f19601f84011601610749565b8181528460208386010111156107cd57600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156107fd57600080fd5b823567ffffffffffffffff81111561081457600080fd5b6108208582860161077a565b95602094909401359450505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461085357600080fd5b919050565b6000806000806080858703121561086e57600080fd5b6108778561082f565b93506108856020860161082f565b925060408501359150606085013567ffffffffffffffff8111156108a857600080fd5b6108b48782880161077a565b91505092959194509250565b600080604083850312156108d357600080fd5b82359150602083013567ffffffffffffffff8111156108f157600080fd5b6108fd8582860161077a565b9150509250929050565b60006020828403121561091957600080fd5b6109228261082f565b9392505050565b6000806000806060858703121561093f57600080fd5b6109488561082f565b935060208501359250604085013567ffffffffffffffff8082111561096c57600080fd5b818701915087601f83011261098057600080fd5b81358181111561098f57600080fd5b8860208285010111156109a157600080fd5b95989497505060200194505050565b60005b838110156109cb5781810151838201526020016109b3565b50506000910152565b60208152600082518060208401526109f38160408501602087016109b0565b601f01601f19169190910160400192915050565b600082601f830112610a1857600080fd5b8135602067ffffffffffffffff821115610a3457610a3461071a565b8160051b610a43828201610749565b9283528481018201928281019087851115610a5d57600080fd5b83870192505b84831015610a7c57823582529183019190830190610a63565b979650505050505050565b600080600080600060a08688031215610a9f57600080fd5b610aa88661082f565b9450610ab66020870161082f565b9350604086013567ffffffffffffffff80821115610ad357600080fd5b610adf89838a01610a07565b94506060880135915080821115610af557600080fd5b610b0189838a01610a07565b93506080880135915080821115610b1757600080fd5b50610b248882890161077a565b9150509295509295909350565b600080600080600060a08688031215610b4957600080fd5b610b528661082f565b9450610b606020870161082f565b93506040860135925060608601359150608086013567ffffffffffffffff811115610b8a57600080fd5b610b248882890161077a565b60008251610ba88184602087016109b0565b9190910192915050565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122082e4108cf77b4365d62c15c1423d04f0a43f84211c47fcf36e2bf9f5c1d3145864736f6c63430008110033a2646970667358221220d99969d05332299531a6532a249cc079172ebdb1ad552aabf4670f4c556a4e1b64736f6c634300081100330000000000000000000000007fa3877e2061243d761f76c40b0db6f0a356f364