60806040523480156200001157600080fd5b506040518060400160405280600481526020016354696d6560e01b8152506040518060400160405280600481526020016354494d4560e01b815250816000908051906020019062000064929190620000f3565b5080516200007a906001906020840190620000f3565b50505062000097620000916200009d60201b60201c565b620000a1565b620001d6565b3390565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001019062000199565b90600052602060002090601f01602090048101928262000125576000855562000170565b82601f106200014057805160ff191683800117855562000170565b8280016001018555821562000170579182015b828111156200017057825182559160200191906001019062000153565b506200017e92915062000182565b5090565b5b808211156200017e576000815560010162000183565b600181811c90821680620001ae57607f821691505b60208210811415620001d057634e487b7160e01b600052602260045260246000fd5b50919050565b611e7c80620001e66000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80636352211e116100b8578063a22cb4651161007c578063a22cb4651461028f578063b88d4fde146102a2578063c87b56dd146102b5578063d3fc9864146102c8578063e985e9c5146102db578063f2fde38b1461031757600080fd5b80636352211e1461024857806370a082311461025b578063715018a61461026e5780638da5cb5b1461027657806395d89b411461028757600080fd5b806323b872dd1161010a57806323b872dd146101d65780632f745c59146101e957806342842e0e146101fc57806342966c681461020f5780634f6ccce71461022257806355f804b31461023557600080fd5b806301ffc9a71461014757806306fdde031461016f578063081812fc14610184578063095ea7b3146101af57806318160ddd146101c4575b600080fd5b61015a610155366004611ade565b61032a565b60405190151581526020015b60405180910390f35b61017761033b565b6040516101669190611bfe565b610197610192366004611b4d565b6103cd565b6040516001600160a01b039091168152602001610166565b6101c26101bd366004611a5d565b610467565b005b6008545b604051908152602001610166565b6101c26101e4366004611969565b61057d565b6101c86101f7366004611a5d565b6105af565b6101c261020a366004611969565b610645565b6101c261021d366004611b4d565b610660565b6101c8610230366004611b4d565b6106da565b6101c2610243366004611b18565b61076d565b610197610256366004611b4d565b6107ae565b6101c861026936600461191b565b610825565b6101c26108ac565b600b546001600160a01b0316610197565b6101776108e2565b6101c261029d366004611a21565b6108f1565b6101c26102b03660046119a5565b6109b6565b6101776102c3366004611b4d565b6109ee565b6101c26102d6366004611a87565b610b70565b61015a6102e9366004611936565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101c261032536600461191b565b610bae565b600061033582610c46565b92915050565b60606000805461034a90611d58565b80601f016020809104026020016040519081016040528092919081815260200182805461037690611d58565b80156103c35780601f10610398576101008083540402835291602001916103c3565b820191906000526020600020905b8154815290600101906020018083116103a657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661044b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610472826107ae565b9050806001600160a01b0316836001600160a01b031614156104e05760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610442565b336001600160a01b03821614806104fc57506104fc81336102e9565b61056e5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610442565b6105788383610c6b565b505050565b610588335b82610cd9565b6105a45760405162461bcd60e51b815260040161044290611c98565b610578838383610dd0565b60006105ba83610825565b821061061c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610442565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610578838383604051806020016040528060008152506109b6565b61066933610582565b6106ce5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610442565b6106d781610f7b565b50565b60006106e560085490565b82106107485760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610442565b6008828154811061075b5761075b611e04565b90600052602060002001549050919050565b600b546001600160a01b031633146107975760405162461bcd60e51b815260040161044290611c63565b80516107aa90600d906020840190611793565b5050565b6000818152600260205260408120546001600160a01b0316806103355760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610442565b60006001600160a01b0382166108905760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610442565b506001600160a01b031660009081526003602052604090205490565b600b546001600160a01b031633146108d65760405162461bcd60e51b815260040161044290611c63565b6108e06000610f84565b565b60606001805461034a90611d58565b6001600160a01b03821633141561094a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610442565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109c03383610cd9565b6109dc5760405162461bcd60e51b815260040161044290611c98565b6109e884848484610fd6565b50505050565b6000818152600260205260409020546060906001600160a01b0316610a6d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610442565b6000828152600c602052604081208054610a8690611d58565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab290611d58565b8015610aff5780601f10610ad457610100808354040283529160200191610aff565b820191906000526020600020905b815481529060010190602001808311610ae257829003601f168201915b505050505090506000610b10611009565b9050805160001415610b23575092915050565b815115610b55578082604051602001610b3d929190611b92565b60405160208183030381529060405292505050919050565b80610b5f85611018565b604051602001610b3d929190611b92565b600b546001600160a01b03163314610b9a5760405162461bcd60e51b815260040161044290611c63565b610ba48383611116565b6105788282611264565b600b546001600160a01b03163314610bd85760405162461bcd60e51b815260040161044290611c63565b6001600160a01b038116610c3d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610442565b6106d781610f84565b60006001600160e01b0319821663780e9d6360e01b14806103355750610335826112fc565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ca0826107ae565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316610d525760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610442565b6000610d5d836107ae565b9050806001600160a01b0316846001600160a01b03161480610d985750836001600160a01b0316610d8d846103cd565b6001600160a01b0316145b80610dc857506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610de3826107ae565b6001600160a01b031614610e4b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610442565b6001600160a01b038216610ead5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610442565b610eb883838361134c565b610ec3600082610c6b565b6001600160a01b0383166000908152600360205260408120805460019290610eec908490611d15565b90915550506001600160a01b0382166000908152600360205260408120805460019290610f1a908490611ce9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6106d781611357565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610fe1848484610dd0565b610fed84848484611397565b6109e85760405162461bcd60e51b815260040161044290611c11565b6060600d805461034a90611d58565b60608161103c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611066578061105081611d93565b915061105f9050600a83611d01565b9150611040565b60008167ffffffffffffffff81111561108157611081611e1a565b6040519080825280601f01601f1916602001820160405280156110ab576020820181803683370190505b5090505b8415610dc8576110c0600183611d15565b91506110cd600a86611dae565b6110d8906030611ce9565b60f81b8183815181106110ed576110ed611e04565b60200101906001600160f81b031916908160001a90535061110f600a86611d01565b94506110af565b6001600160a01b03821661116c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610442565b6000818152600260205260409020546001600160a01b0316156111d15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610442565b6111dd6000838361134c565b6001600160a01b0382166000908152600360205260408120805460019290611206908490611ce9565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152600260205260409020546001600160a01b03166112dd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610442565b6000828152600c60209081526040909120825161057892840190611793565b60006001600160e01b031982166380ac58cd60e01b148061132d57506001600160e01b03198216635b5e139f60e01b145b8061033557506301ffc9a760e01b6001600160e01b0319831614610335565b6105788383836114a4565b6113608161155c565b6000818152600a60205260409020805461137990611d58565b1590506106d7576000818152600a602052604081206106d791611817565b60006001600160a01b0384163b1561149957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906113db903390899088908890600401611bc1565b602060405180830381600087803b1580156113f557600080fd5b505af1925050508015611425575060408051601f3d908101601f1916820190925261142291810190611afb565b60015b61147f573d808015611453576040519150601f19603f3d011682016040523d82523d6000602084013e611458565b606091505b5080516114775760405162461bcd60e51b815260040161044290611c11565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610dc8565b506001949350505050565b6001600160a01b0383166114ff576114fa81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611522565b816001600160a01b0316836001600160a01b031614611522576115228382611603565b6001600160a01b03821661153957610578816116a0565b826001600160a01b0316826001600160a01b03161461057857610578828261174f565b6000611567826107ae565b90506115758160008461134c565b611580600083610c6b565b6001600160a01b03811660009081526003602052604081208054600192906115a9908490611d15565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000600161161084610825565b61161a9190611d15565b60008381526007602052604090205490915080821461166d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906116b290600190611d15565b600083815260096020526040812054600880549394509092849081106116da576116da611e04565b9060005260206000200154905080600883815481106116fb576116fb611e04565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061173357611733611dee565b6001900381819060005260206000200160009055905550505050565b600061175a83610825565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b82805461179f90611d58565b90600052602060002090601f0160209004810192826117c15760008555611807565b82601f106117da57805160ff1916838001178555611807565b82800160010185558215611807579182015b828111156118075782518255916020019190600101906117ec565b5061181392915061184d565b5090565b50805461182390611d58565b6000825580601f10611833575050565b601f0160209004906000526020600020908101906106d791905b5b80821115611813576000815560010161184e565b600067ffffffffffffffff8084111561187d5761187d611e1a565b604051601f8501601f19908116603f011681019082821181831017156118a5576118a5611e1a565b816040528093508581528686860111156118be57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b03811681146118ef57600080fd5b919050565b600082601f83011261190557600080fd5b61191483833560208501611862565b9392505050565b60006020828403121561192d57600080fd5b611914826118d8565b6000806040838503121561194957600080fd5b611952836118d8565b9150611960602084016118d8565b90509250929050565b60008060006060848603121561197e57600080fd5b611987846118d8565b9250611995602085016118d8565b9150604084013590509250925092565b600080600080608085870312156119bb57600080fd5b6119c4856118d8565b93506119d2602086016118d8565b925060408501359150606085013567ffffffffffffffff8111156119f557600080fd5b8501601f81018713611a0657600080fd5b611a1587823560208401611862565b91505092959194509250565b60008060408385031215611a3457600080fd5b611a3d836118d8565b915060208301358015158114611a5257600080fd5b809150509250929050565b60008060408385031215611a7057600080fd5b611a79836118d8565b946020939093013593505050565b600080600060608486031215611a9c57600080fd5b611aa5846118d8565b925060208401359150604084013567ffffffffffffffff811115611ac857600080fd5b611ad4868287016118f4565b9150509250925092565b600060208284031215611af057600080fd5b813561191481611e30565b600060208284031215611b0d57600080fd5b815161191481611e30565b600060208284031215611b2a57600080fd5b813567ffffffffffffffff811115611b4157600080fd5b610dc8848285016118f4565b600060208284031215611b5f57600080fd5b5035919050565b60008151808452611b7e816020860160208601611d2c565b601f01601f19169290920160200192915050565b60008351611ba4818460208801611d2c565b835190830190611bb8818360208801611d2c565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611bf490830184611b66565b9695505050505050565b6020815260006119146020830184611b66565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611cfc57611cfc611dc2565b500190565b600082611d1057611d10611dd8565b500490565b600082821015611d2757611d27611dc2565b500390565b60005b83811015611d47578181015183820152602001611d2f565b838111156109e85750506000910152565b600181811c90821680611d6c57607f821691505b60208210811415611d8d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611da757611da7611dc2565b5060010190565b600082611dbd57611dbd611dd8565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146106d757600080fdfea2646970667358221220350c2e53e8bb61e9f1ebb9bf5cf5414a1262cbdc89a4f1ba6aa1f4fddbe225d664736f6c63430008070033