0x608060405234801561001057600080fd5b5061002161001c610026565b61002a565b61007a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6129a9806100896000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d0578063c6c3bbe6146100ee578063eb07bb5714610101578063f2fde38b1461011457610088565b806315dacbea1461008d578063321e3885146100a2578063715018a6146100b557806388433651146100bd575b600080fd5b6100a061009b366004610636565b610127565b005b6100a06100b0366004610707565b610197565b6100a0610201565b6100a06100cb3660046106bb565b61020b565b6100d861023f565b6040516100e591906107c6565b60405180910390f35b6100a06100fc366004610680565b61024e565b6100d861010f366004610730565b6102bb565b6100a0610122366004610615565b610495565b61012f6104d8565b604051632142170760e11b81526001600160a01b038516906342842e0e9061015f908690869086906004016107da565b600060405180830381600087803b15801561017957600080fd5b505af115801561018d573d6000803e3d6000fd5b5050505050505050565b61019f6104d8565b604051630437b16160e21b81526001600160a01b038316906310dec584906101cb9084906004016108e2565b600060405180830381600087803b1580156101e557600080fd5b505af11580156101f9573d6000803e3d6000fd5b505050505050565b6102096104d8565b565b6102136104d8565b6040516355f804b360e01b81526001600160a01b038316906355f804b3906101cb908490600401610832565b6000546001600160a01b031690565b6102566104d8565b6040516340c10f1960e01b81526001600160a01b038416906340c10f19906102849085908590600401610819565b600060405180830381600087803b15801561029e57600080fd5b505af11580156102b2573d6000803e3d6000fd5b50505050505050565b60006102c56104d8565b6000604051806020016102d79061056b565b6020820181038252601f19601f82011660405250905060008484436040516020016103049392919061079f565b6040516020818303038152906040528051906020012090506000818351602085016000f59050803b61033557600080fd5b7fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca3128160405161036491906107c6565b60405180910390a1604051638beaf7d760e01b81526001600160a01b03821690638beaf7d79061039a9089908990600401610845565b600060405180830381600087803b1580156103b457600080fd5b505af11580156103c8573d6000803e3d6000fd5b505060405163558a729760e01b81526001600160a01b038416925063558a729791506103fb9030906001906004016107fe565b600060405180830381600087803b15801561041557600080fd5b505af1158015610429573d6000803e3d6000fd5b505060405163f2fde38b60e01b81526001600160a01b038416925063f2fde38b91506104599033906004016107c6565b600060405180830381600087803b15801561047357600080fd5b505af1158015610487573d6000803e3d6000fd5b509298975050505050505050565b61049d6104d8565b6001600160a01b0381166104cc5760405162461bcd60e51b81526004016104c390610867565b60405180910390fd5b6104d581610517565b50565b6104e0610567565b6001600160a01b03166104f161023f565b6001600160a01b0316146102095760405162461bcd60e51b81526004016104c3906108ad565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3390565b6120428061093283390190565b80356001600160a01b038116811461058f57600080fd5b919050565b600082601f8301126105a4578081fd5b813567ffffffffffffffff808211156105bf576105bf61091b565b604051601f8301601f1916810160200182811182821017156105e3576105e361091b565b6040528281528483016020018610156105fa578384fd5b82602086016020830137918201602001929092529392505050565b600060208284031215610626578081fd5b61062f82610578565b9392505050565b6000806000806080858703121561064b578283fd5b61065485610578565b935061066260208601610578565b925061067060408601610578565b9396929550929360600135925050565b600080600060608486031215610694578283fd5b61069d84610578565b92506106ab60208501610578565b9150604084013590509250925092565b600080604083850312156106cd578182fd5b6106d683610578565b9150602083013567ffffffffffffffff8111156106f1578182fd5b6106fd85828601610594565b9150509250929050565b60008060408385031215610719578182fd5b61072283610578565b946020939093013593505050565b60008060408385031215610742578182fd5b823567ffffffffffffffff811115610758578283fd5b61076485828601610594565b95602094909401359450505050565b6000815180845261078b8160208601602086016108eb565b601f01601f19169290920160200192915050565b600084516107b18184602089016108eb565b91909101928352506020820152604001919050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b03929092168252602082015260400190565b60006020825261062f6020830184610773565b6000604082526108586040830185610773565b90508260208301529392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b90815260200190565b60005b838110156109065781810151838201526020016108ee565b83811115610915576000848401525b50505050565b634e487b7160e01b600052604160045260246000fdfe608060405234801561001057600080fd5b5061002161001c610026565b61002a565b61007a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611fb9806100896000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806369e9cae11161010f578063a9059cbb116100a2578063df24805d11610071578063df24805d146103f5578063e985e9c5146103fd578063f2fde38b14610410578063f84ddf0b14610423576101f0565b8063a9059cbb1461039c578063b88d4fde146103af578063c87b56dd146103c2578063de637f67146103d5576101f0565b80638beaf7d7116100de5780638beaf7d7146103665780638da5cb5b1461037957806395d89b4114610381578063a22cb46514610389576101f0565b806369e9cae1146102a35780636c0360eb1461034357806370a082311461034b578063715018a61461035e576101f0565b80632f745c59116101875780634f6ccce7116101565780634f6ccce7146102f7578063558a72971461030a57806355f804b31461031d5780636352211e14610330576101f0565b80632f745c59146102b657806332cb6b0c146102c957806340c10f19146102d157806342842e0e146102e4576101f0565b806310dec584116101c357806310dec5841461026857806313e7c9d81461027b57806318160ddd1461028e57806323b872dd146102a3576101f0565b806301ffc9a7146101f557806306fdde031461021e578063081812fc14610233578063095ea7b314610253575b600080fd5b6102086102033660046117d5565b61042b565b60405161021591906119a5565b60405180910390f35b610226610473565b60405161021591906119b0565b610246610241366004611873565b610505565b604051610215919061194d565b61026661026136600461177a565b610551565b005b610266610276366004611873565b610624565b610208610289366004611640565b610658565b61029661066d565b6040516102159190611e91565b6102666102b136600461168c565b610673565b6102966102c436600461177a565b61073b565b61029661078d565b6102666102df36600461177a565b610793565b6102666102f236600461168c565b6108e1565b610296610305366004611873565b6108fc565b610266610318366004611740565b610957565b61026661032b3660046117fd565b61098a565b61024661033e366004611873565b6109d0565b610226610a05565b610296610359366004611640565b610a93565b610266610ad7565b610266610374366004611830565b610ae1565b610246610b62565b610226610b71565b610266610397366004611740565b610b80565b6102666103aa36600461177a565b610c18565b6102666103bd3660046116c7565b610c82565b6102266103d0366004611873565b610ce7565b6103e86103e33660046117a3565b610d79565b6040516102159190611961565b610208610e43565b61020861040b36600461165a565b610e4c565b61026661041e366004611640565b610e7a565b610296610eb4565b60006001600160e01b031982166380ac58cd60e01b148061045c57506001600160e01b03198216635b5e139f60e01b145b8061046b575061046b82610eba565b90505b919050565b60606001805461048290611f01565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae90611f01565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b5050505050905090565b600061051082610ed3565b6105355760405162461bcd60e51b815260040161052c90611bca565b60405180910390fd5b506000908152600860205260409020546001600160a01b031690565b600061055c826109d0565b9050806001600160a01b0316836001600160a01b031614156105905760405162461bcd60e51b815260040161052c90611ce3565b336001600160a01b03821614806105ac57506105ac8133610e4c565b6105c85760405162461bcd60e51b815260040161052c90611b7e565b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b336000908152600b602052604090205460ff166106535760405162461bcd60e51b815260040161052c90611e6b565b600355565b600b6020526000908152604090205460ff1681565b600e5490565b6001600160a01b0382166106995760405162461bcd60e51b815260040161052c90611cac565b336000908152600b602052604090205460ff16806106bc57506106bc3382610ef0565b6106d85760405162461bcd60e51b815260040161052c90611d4f565b336000908152600b602052604090205460ff168061070f5750826001600160a01b0316610704826109d0565b6001600160a01b0316145b61072b5760405162461bcd60e51b815260040161052c90611bf8565b610736838383610f4f565b505050565b600061074683610a93565b82106107645760405162461bcd60e51b815260040161052c90611a67565b506001600160a01b03919091166000908152600c60209081526040808320938352929052205490565b60035481565b336000908152600b602052604090205460ff166107c25760405162461bcd60e51b815260040161052c90611e6b565b600354816004546107d39190611ea6565b106107f05760405162461bcd60e51b815260040161052c90611b2d565b6001600160a01b0382166108165760405162461bcd60e51b815260040161052c90611cac565b60005b8181101561073657610831600084600454600161103f565b600454600090815260066020908152604080832080546001600160a01b0319166001600160a01b03881690811790915583526007909152812080546001929061087b908490611ea6565b90915550506004546040516001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4600480549060006108c983611f3c565b919050555080806108d990611f3c565b915050610819565b61073683838360405180602001604052806000815250610c82565b600061090661066d565b82106109245760405162461bcd60e51b815260040161052c90611dca565b600e828154811061094557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b61095f6110e6565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b336000908152600b602052604090205460ff166109b95760405162461bcd60e51b815260040161052c90611e6b565b80516109cc9060059060208401906114fa565b5050565b6000818152600660205260408120546001600160a01b03168061046b5760405162461bcd60e51b815260040161052c90611b55565b60058054610a1290611f01565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3e90611f01565b8015610a8b5780601f10610a6057610100808354040283529160200191610a8b565b820191906000526020600020905b815481529060010190602001808311610a6e57829003601f168201915b505050505081565b60006001600160a01b038216610abb5760405162461bcd60e51b815260040161052c90611c7d565b506001600160a01b031660009081526007602052604090205490565b610adf6110e6565b565b600a5460ff1615610b045760405162461bcd60e51b815260040161052c90611c3c565b8151610b179060019060208501906114fa565b508151610b2b9060029060208501906114fa565b5060035550326000908152600b60205260408082208054600160ff1991821681179092553384529190922080549091169091179055565b6000546001600160a01b031690565b60606002805461048290611f01565b6001600160a01b038216331415610ba95760405162461bcd60e51b815260040161052c90611af8565b3360008181526009602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610c0c9085906119a5565b60405180910390a35050565b6001600160a01b038216610c3e5760405162461bcd60e51b815260040161052c90611cac565b610c47816109d0565b6001600160a01b0316336001600160a01b031614610c775760405162461bcd60e51b815260040161052c90611a30565b6109cc338383610f4f565b5060408051602080820183526000808352338152600b909152919091205460ff1680610cba5750610cba610cb4611125565b83610ef0565b610cd65760405162461bcd60e51b815260040161052c906119e3565b610ce1848484610f4f565b50505050565b6060610cf282610ed3565b610d0e5760405162461bcd60e51b815260040161052c90611d93565b600060058054610d1d90611f01565b905011610d475760405180604001604052806005815260200164173539b7b760d91b81525061046b565b6005610d5283611129565b604051602001610d639291906118a7565b6040516020818303038152906040529050919050565b60606000610d8685610a93565b905082811115610d935750815b60008167ffffffffffffffff811115610dbc57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610de5578160200160208202803683370190505b509050845b82811015610e3957610dfc878261073b565b828281518110610e1c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610e3181611f3c565b915050610dea565b5095945050505050565b600a5460ff1681565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b610e826110e6565b6001600160a01b038116610ea85760405162461bcd60e51b815260040161052c90611ab2565b610eb1816111d4565b50565b60045481565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600660205260409020546001600160a01b0316151590565b600080610efc836109d0565b9050806001600160a01b0316846001600160a01b03161480610f375750836001600160a01b0316610f2c84610505565b6001600160a01b0316145b80610f475750610f478185610e4c565b949350505050565b610f5881610ed3565b610f745760405162461bcd60e51b815260040161052c90611c59565b610f81838383600161103f565b600081815260066020908152604080832080546001600160a01b0319166001600160a01b03878116919091179091558616835260079091528120805460019290610fcc908490611ebe565b90915550506001600160a01b0382166000908152600760205260408120805460019290610ffa908490611ea6565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b60018111156110605760405162461bcd60e51b815260040161052c90611e16565b816001600160a01b03851661107d5761107881611224565b6110a0565b836001600160a01b0316856001600160a01b0316146110a0576110a08582611268565b6001600160a01b0384166110bc576110b781611305565b6110df565b846001600160a01b0316846001600160a01b0316146110df576110df84826113de565b5050505050565b6110ee611125565b6001600160a01b03166110ff610b62565b6001600160a01b031614610adf5760405162461bcd60e51b815260040161052c90611d1a565b3390565b6060600061113683611422565b600101905060008167ffffffffffffffff81111561116457634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561118e576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846111c7576111cc565b611198565b509392505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600e80546000838152600f60205260408120829055600182018355919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0155565b6000600161127584610a93565b61127f9190611ebe565b6000838152600d60205260409020549091508082146112d2576001600160a01b0384166000908152600c602090815260408083208584528252808320548484528184208190558352600d90915290208190555b506000918252600d602090815260408084208490556001600160a01b039094168352600c81528383209183525290812055565b600e5460009061131790600190611ebe565b6000838152600f6020526040812054600e805493945090928490811061134d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600e838154811061137c57634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600f9091526040808220849055858252812055600e8054806113c257634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006113e983610a93565b6001600160a01b039093166000908152600c602090815260408083208684528252808320859055938252600d9052919091209190915550565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106114615772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061148d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106114ab57662386f26fc10000830492506010015b6305f5e10083106114c3576305f5e100830492506008015b61271083106114d757612710830492506004015b606483106114e9576064830492506002015b600a831061046b5760010192915050565b82805461150690611f01565b90600052602060002090601f016020900481019282611528576000855561156e565b82601f1061154157805160ff191683800117855561156e565b8280016001018555821561156e579182015b8281111561156e578251825591602001919060010190611553565b5061157a92915061157e565b5090565b5b8082111561157a576000815560010161157f565b600067ffffffffffffffff808411156115ae576115ae611f6d565b604051601f8501601f1916810160200182811182821017156115d2576115d2611f6d565b6040528481529150818385018610156115ea57600080fd5b8484602083013760006020868301015250509392505050565b80356001600160a01b038116811461046e57600080fd5b600082601f83011261162a578081fd5b61163983833560208501611593565b9392505050565b600060208284031215611651578081fd5b61163982611603565b6000806040838503121561166c578081fd5b61167583611603565b915061168360208401611603565b90509250929050565b6000806000606084860312156116a0578081fd5b6116a984611603565b92506116b760208501611603565b9150604084013590509250925092565b600080600080608085870312156116dc578081fd5b6116e585611603565b93506116f360208601611603565b925060408501359150606085013567ffffffffffffffff811115611715578182fd5b8501601f81018713611725578182fd5b61173487823560208401611593565b91505092959194509250565b60008060408385031215611752578182fd5b61175b83611603565b91506020830135801515811461176f578182fd5b809150509250929050565b6000806040838503121561178c578182fd5b61179583611603565b946020939093013593505050565b6000806000606084860312156117b7578283fd5b6117c084611603565b95602085013595506040909401359392505050565b6000602082840312156117e6578081fd5b81356001600160e01b031981168114611639578182fd5b60006020828403121561180e578081fd5b813567ffffffffffffffff811115611824578182fd5b610f478482850161161a565b60008060408385031215611842578182fd5b823567ffffffffffffffff811115611858578283fd5b6118648582860161161a565b95602094909401359450505050565b600060208284031215611884578081fd5b5035919050565b6000815161189d818560208601611ed5565b9290920192915050565b82546000908190600281046001808316806118c357607f831692505b60208084108214156118e357634e487b7160e01b87526022600452602487fd5b8180156118f7576001811461190857611934565b60ff19861689528489019650611934565b6119118b611e9a565b885b8681101561192c5781548b820152908501908301611913565b505084890196505b505050505050611944818561188b565b95945050505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156119995783518352928401929184019160010161197d565b50909695505050505050565b901515815260200190565b60006020825282518060208401526119cf816040850160208701611ed5565b601f01601f19169190910160400192915050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526017908201527f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f43616c6c65722063616e6e6f7420617070726f7665207468656d73656c766573604082015260600190565b6020808252600e908201526d27232a1d1026b4b73a1037baba1760911b604082015260600190565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b6020808252602c908201527f43616c6c6572206973206e6f7420746865206f776e6572206e6f72206170707260408201526b1bdd995908199bdc88185b1b60a21b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526024908201527f546f6b656e206973206e6f74206f776e6564206279202766726f6d27206164646040820152637265737360e01b606082015260800190565b602080825260039082015262753a7560e81b604082015260600190565b6020808252600a90820152696e6f742065786973747360b01b604082015260600190565b602080825260159082015274496e76616c6964206f776e6572206164647265737360581b604082015260600190565b60208082526019908201527f496e76616c696420726563697069656e74206164647265737300000000000000604082015260600190565b6020808252601b908201527f43616c6c657220697320616c726561647920746865206f776e65720000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526024908201527f43616c6c6572206973206e6f7420617070726f766564206e6f7220746865206f6040820152633bb732b960e11b606082015260800190565b60208082526018908201527f4552433732313a20696e76616c696420746f6b656e2049440000000000000000604082015260600190565b6020808252602c908201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60408201526b7574206f6620626f756e647360a01b606082015260800190565b60208082526035908201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604082015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606082015260800190565b6020808252600c908201526b2737ba1037b832b930ba37b960a11b604082015260600190565b90815260200190565b60009081526020902090565b60008219821115611eb957611eb9611f57565b500190565b600082821015611ed057611ed0611f57565b500390565b60005b83811015611ef0578181015183820152602001611ed8565b83811115610ce15750506000910152565b600281046001821680611f1557607f821691505b60208210811415611f3657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611f5057611f50611f57565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212206c8ff394719eef3bf9592b60a12f3ee54f730dad405b53e0ec7c3a93e77b963064736f6c63430008000033a264697066735822122011934fdc6e7c75293ad21272d3d3e4c39dc9c5fb7b4d2025f4fdb8e8bbeed56964736f6c63430008000033