60806040523480156200001157600080fd5b506040516200164a3803806200164a833981016040819052620000349162000126565b8181600062000044838262000221565b50600162000053828262000221565b5050505050620002ed565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008657600080fd5b81516001600160401b0380821115620000a357620000a36200005e565b604051601f8301601f19908116603f01168101908282118183101715620000ce57620000ce6200005e565b8160405283815260209250866020858801011115620000ec57600080fd5b600091505b83821015620001105785820183015181830184015290820190620000f1565b6000602085830101528094505050505092915050565b600080604083850312156200013a57600080fd5b82516001600160401b03808211156200015257600080fd5b620001608683870162000074565b935060208501519150808211156200017757600080fd5b50620001868582860162000074565b9150509250929050565b600181811c90821680620001a557607f821691505b602082108103620001c657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021c576000816000526020600020601f850160051c81016020861015620001f75750805b601f850160051c820191505b81811015620002185782815560010162000203565b5050505b505050565b81516001600160401b038111156200023d576200023d6200005e565b62000255816200024e845462000190565b84620001cc565b602080601f8311600181146200028d5760008415620002745750858301515b600019600386901b1c1916600185901b17855562000218565b600085815260208120601f198616915b82811015620002be578886015182559484019460019091019084016200029d565b5085821015620002dd5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61134d80620002fd6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806355f804b3116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde14610254578063c87b56dd14610267578063e985e9c51461027a57600080fd5b806395d89b4114610239578063a22cb4651461024157600080fd5b806355f804b3146101e957806361bc221a146101fc5780636352211e1461021357806370a082311461022657600080fd5b806323b872dd116100ee57806323b872dd1461019d57806340c10f19146101b057806342842e0e146101c357806342966c68146101d657600080fd5b806301ffc9a71461012057806306fdde0314610148578063081812fc1461015d578063095ea7b314610188575b600080fd5b61013361012e366004610e1d565b6102b6565b60405190151581526020015b60405180910390f35b6101506102c7565b60405161013f9190610e8a565b61017061016b366004610e9d565b610359565b6040516001600160a01b03909116815260200161013f565b61019b610196366004610ed2565b610382565b005b61019b6101ab366004610efc565b610391565b61019b6101be366004610ed2565b61043a565b61019b6101d1366004610efc565b610471565b61019b6101e4366004610e9d565b61048c565b61019b6101f7366004610f38565b610498565b61020560065481565b60405190815260200161013f565b610170610221366004610e9d565b6104a5565b610205610234366004610faa565b6104b0565b610150610511565b61019b61024f366004610fc5565b610520565b61019b610262366004611017565b61052b565b610150610275366004610e9d565b610543565b6101336102883660046110f3565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006102c1826105ab565b92915050565b6060600080546102d690611126565b80601f016020809104026020016040519081016040528092919081815260200182805461030290611126565b801561034f5780601f106103245761010080835404028352916020019161034f565b820191906000526020600020905b81548152906001019060200180831161033257829003601f168201915b5050505050905090565b600061036482610646565b506000828152600460205260409020546001600160a01b03166102c1565b61038d82823361067f565b5050565b6001600160a01b0382166103c057604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006103cd83833361068c565b9050836001600160a01b0316816001600160a01b031614610434576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201849052821660448201526064016103b7565b50505050565b60005b8181101561046c5761045183600654610792565b60066000815461046090611160565b9091555060010161043d565b505050565b61046c8383836040518060200160405280600081525061052b565b61038d6000823361068c565b600761046c8284836111cf565b60006102c182610646565b60006001600160a01b0382166104f5576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024016103b7565b506001600160a01b031660009081526003602052604090205490565b6060600180546102d690611126565b61038d3383836107ac565b610536848484610391565b6104343385858585610864565b606061054e82610646565b50600061055961098f565b9050600081511161057957604051806020016040528060008152506105a4565b806105838461099e565b60405160200161059492919061128f565b6040516020818303038152906040525b9392505050565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061060e57506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806102c157507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146102c1565b6000818152600260205260408120546001600160a01b0316806102c157604051637e27328960e01b8152600481018490526024016103b7565b61046c8383836001610a3e565b6000828152600260205260408120546001600160a01b03908116908316156106b9576106b9818486610b89565b6001600160a01b038116156106f7576106d6600085600080610a3e565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b03851615610726576001600160a01b0385166000908152600360205260409020805460010190555b600084815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b61038d828260405180602001604052806000815250610c06565b6001600160a01b0382166107f7576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016103b7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561098857604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906108a69088908890879087906004016112be565b6020604051808303816000875af19250505080156108e1575060408051601f3d908101601f191682019092526108de918101906112fa565b60015b61094a573d80801561090f576040519150601f19603f3d011682016040523d82523d6000602084013e610914565b606091505b50805160000361094257604051633250574960e11b81526001600160a01b03851660048201526024016103b7565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461098657604051633250574960e11b81526001600160a01b03851660048201526024016103b7565b505b5050505050565b6060600780546102d690611126565b606060006109ab83610c1e565b600101905060008167ffffffffffffffff8111156109cb576109cb611001565b6040519080825280601f01601f1916602001820160405280156109f5576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846109ff57509392505050565b8080610a5257506001600160a01b03821615155b15610b4c576000610a6284610646565b90506001600160a01b03831615801590610a8e5750826001600160a01b0316816001600160a01b031614155b8015610ac057506001600160a01b0380821660009081526005602090815260408083209387168352929052205460ff16155b15610b02576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016103b7565b8115610b4a5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50506000908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610b94838383610d00565b61046c576001600160a01b038316610bc257604051637e27328960e01b8152600481018290526024016103b7565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602481018290526044016103b7565b610c108383610d86565b61046c336000858585610864565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610c67577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310610c93576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310610cb157662386f26fc10000830492506010015b6305f5e1008310610cc9576305f5e100830492506008015b6127108310610cdd57612710830492506004015b60648310610cef576064830492506002015b600a83106102c15760010192915050565b60006001600160a01b03831615801590610d7e5750826001600160a01b0316846001600160a01b03161480610d5a57506001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b80610d7e57506000828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b038216610db057604051633250574960e11b8152600060048201526024016103b7565b6000610dbe8383600061068c565b90506001600160a01b0381161561046c576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016103b7565b6001600160e01b031981168114610e1a57600080fd5b50565b600060208284031215610e2f57600080fd5b81356105a481610e04565b60005b83811015610e55578181015183820152602001610e3d565b50506000910152565b60008151808452610e76816020860160208601610e3a565b601f01601f19169290920160200192915050565b6020815260006105a46020830184610e5e565b600060208284031215610eaf57600080fd5b5035919050565b80356001600160a01b0381168114610ecd57600080fd5b919050565b60008060408385031215610ee557600080fd5b610eee83610eb6565b946020939093013593505050565b600080600060608486031215610f1157600080fd5b610f1a84610eb6565b9250610f2860208501610eb6565b9150604084013590509250925092565b60008060208385031215610f4b57600080fd5b823567ffffffffffffffff80821115610f6357600080fd5b818501915085601f830112610f7757600080fd5b813581811115610f8657600080fd5b866020828501011115610f9857600080fd5b60209290920196919550909350505050565b600060208284031215610fbc57600080fd5b6105a482610eb6565b60008060408385031215610fd857600080fd5b610fe183610eb6565b915060208301358015158114610ff657600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561102d57600080fd5b61103685610eb6565b935061104460208601610eb6565b925060408501359150606085013567ffffffffffffffff8082111561106857600080fd5b818701915087601f83011261107c57600080fd5b81358181111561108e5761108e611001565b604051601f8201601f19908116603f011681019083821181831017156110b6576110b6611001565b816040528281528a60208487010111156110cf57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561110657600080fd5b61110f83610eb6565b915061111d60208401610eb6565b90509250929050565b600181811c9082168061113a57607f821691505b60208210810361115a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006001820161118057634e487b7160e01b600052601160045260246000fd5b5060010190565b601f82111561046c576000816000526020600020601f850160051c810160208610156111b05750805b601f850160051c820191505b81811015610986578281556001016111bc565b67ffffffffffffffff8311156111e7576111e7611001565b6111fb836111f58354611126565b83611187565b6000601f84116001811461122f57600085156112175750838201355b600019600387901b1c1916600186901b178355610988565b600083815260209020601f19861690835b828110156112605786850135825560209485019460019092019101611240565b508682101561127d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600083516112a1818460208801610e3a565b8351908301906112b5818360208801610e3a565b01949350505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526112f06080830184610e5e565b9695505050505050565b60006020828403121561130c57600080fd5b81516105a481610e0456fea2646970667358221220fb16118e90145ca79415c7e01de0e4c636563c829c86e8df9187f5b4d7a5218b64736f6c63430008180033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000011426f7265644170655961636874436c756200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241594300000000000000000000000000000000000000000000000000000000