//
0x608060405234801561001057600080fd5b5060405162001ad838038062001ad8833981016040819052610031916100af565b60018055600280546001600160a01b0319166001600160a01b0383161790556100593361005f565b506100df565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a35050565b6000602082840312156100c157600080fd5b81516001600160a01b03811681146100d857600080fd5b9392505050565b6119e980620000ef6000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a0a8e46011610097578063d604b16011610066578063d604b160146102a2578063df55406e146102c3578063ec979082146102d6578063f7c618c1146102df57600080fd5b8063a0a8e46014610204578063b1283e771461022e578063c9d27afe14610256578063cb2ef6f71461026957600080fd5b8063677bd9ff116100d3578063677bd9ff1461019157806370480275146101a45780637f1a10da146101b75780638da5cb5b146101df57600080fd5b806313af4035146101055780631785f53c1461011a5780633ec791931461012d578063429b62e51461015e575b600080fd5b6101186101133660046113de565b6102f2565b005b6101186101283660046113de565b610329565b61014061013b366004611400565b6103f9565b60405161015599989796959493929190611497565b60405180910390f35b61018161016c3660046113de565b60056020526000908152604090205460ff1681565b6040519015158152602001610155565b61011861019f366004611400565b610626565b6101186101b23660046113de565b6109f4565b6101ca6101c5366004611512565b610b0f565b60408051928352602083019190915201610155565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610155565b6040805180820190915260058152640312e302e360dc1b60208201525b604051610155919061153e565b61024161023c366004611400565b610b90565b60405161015599989796959493929190611551565b6101186102643660046115da565b610d7a565b60408051808201909152601d81527f706c61736d6176657273652d67697665617761792d636f6e74726163740000006020820152610221565b6102b56102b03660046116ad565b610f05565b604051908152602001610155565b6101186102d1366004611747565b6111c4565b6102b560035481565b6002546101ec906001600160a01b031681565b6000546001600160a01b0316331461031d576040516316ccb9cb60e11b815260040160405180910390fd5b61032681611372565b50565b6000546001600160a01b03163314610354576040516316ccb9cb60e11b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff166103b05760405162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71030b236b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b038116600081815260056020526040808220805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9190a250565b60608060606000806000806000806000600460008c8152602001908152602001600020905080600001816003018260040183600101548460020160009054906101000a900460ff168560050154866006015487600701548860080160009054906101000a900460ff1688805461046e90611770565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611770565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b505050505098508780546104fa90611770565b80601f016020809104026020016040519081016040528092919081815260200182805461052690611770565b80156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b5050505050975086805461058690611770565b80601f01602080910402602001604051908101604052809291908181526020018280546105b290611770565b80156105ff5780601f106105d4576101008083540402835291602001916105ff565b820191906000526020600020905b8154815290600101906020018083116105e257829003601f168201915b50505050509650995099509950995099509950995099509950509193959799909294969850565b6002600154036106785760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103a7565b60026001556000818152600460205260409020600881015460ff166106df5760405162461bcd60e51b815260206004820181905260248201527f4d61726b657420686173206e6f74206265656e207265736f6c7665642079657460448201526064016103a7565b33600090815260098201602052604090205460ff166107405760405162461bcd60e51b815260206004820152601860248201527f5573657220646964206e6f74207061727469636970617465000000000000000060448201526064016103a7565b336000908152600a8201602052604090205460ff16156107a25760405162461bcd60e51b815260206004820152601860248201527f557365722068617320616c726561647920636c61696d6564000000000000000060448201526064016103a7565b6000600160028084015460ff16908111156107bf576107bf61145f565b1480156107dd5750336000908152600b8301602052604090205460ff165b1561081b57816006015482600501546107f691906117c0565b8260050154836007015461080a91906117d9565b61081491906117f0565b905061088d565b60028281015460ff16818111156108345761083461145f565b1480156108535750336000908152600b8301602052604090205460ff16155b1561088d578160060154826005015461086c91906117c0565b8260060154836007015461088091906117d9565b61088a91906117f0565b90505b600081116108dd5760405162461bcd60e51b815260206004820152601760248201527f4e6f207265776172647320666f7220746865207573657200000000000000000060448201526064016103a7565b336000818152600a8401602052604090819020805460ff19166001179055600254905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561094b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096f9190611812565b6109b45760405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1c985b9cd9995c8819985a5b195960521b60448201526064016103a7565b604051818152339084907f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269060200160405180910390a350506001805550565b6000546001600160a01b03163314610a1f576040516316ccb9cb60e11b815260040160405180910390fd5b6001600160a01b038116610a675760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016103a7565b6001600160a01b03811660009081526005602052604090205460ff1615610ac35760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c9030b71030b236b4b760811b60448201526064016103a7565b6001600160a01b038116600081815260056020526040808220805460ff19166001179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399190a250565b60008281526004602090815260408083206001600160a01b03851684526009810190925282205482919060ff1615610b80576001600160a01b0384166000908152600b8201602052604090205460ff1615610b7257600160009250925050610b89565b600060019250925050610b89565b60008092509250505b9250929050565b600460205260009081526040902080548190610bab90611770565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd790611770565b8015610c245780601f10610bf957610100808354040283529160200191610c24565b820191906000526020600020905b815481529060010190602001808311610c0757829003601f168201915b50505050600183015460028401546003850180549495929460ff909216935090610c4d90611770565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7990611770565b8015610cc65780601f10610c9b57610100808354040283529160200191610cc6565b820191906000526020600020905b815481529060010190602001808311610ca957829003601f168201915b505050505090806004018054610cdb90611770565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0790611770565b8015610d545780601f10610d2957610100808354040283529160200191610d54565b820191906000526020600020905b815481529060010190602001808311610d3757829003601f168201915b505050506005830154600684015460078501546008909501549394919390925060ff1689565b600082815260046020526040902060018101544210610ddb5760405162461bcd60e51b815260206004820152601e60248201527f4d61726b657420766f74696e6720706572696f642068617320656e646564000060448201526064016103a7565b33600090815260098201602052604090205460ff1615610e365760405162461bcd60e51b8152602060048201526016602482015275155cd95c881a185cc8185b1c9958591e481d9bdd195960521b60448201526064016103a7565b3360009081526009820160205260409020805460ff191660011790558115610e93576001816005016000828254610e6d91906117c0565b9091555050336000908152600b820160205260409020805460ff19166001179055610ec7565b6001816006016000828254610ea891906117c0565b9091555050336000908152600b820160205260409020805460ff191690555b6040518215158152339084907f5aaa9aad7433112662b9e5ae23b96ed62b00035f413ab908c55607284e0804e29060200160405180910390a3505050565b600080546001600160a01b03163314610f31576040516316ccb9cb60e11b815260040160405180910390fd5b60008311610f815760405162461bcd60e51b815260206004820152601f60248201527f4475726174696f6e206d7573742062652067726561746572207468616e20300060448201526064016103a7565b60008551118015610f93575060008451115b610fdf5760405162461bcd60e51b815260206004820152601760248201527f4f7074696f6e732063616e6e6f7420626520656d70747900000000000000000060448201526064016103a7565b6000821161103e5760405162461bcd60e51b815260206004820152602660248201527f416c6c6f63617465642066756e6473206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016103a7565b6002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190611812565b6111055760405162461bcd60e51b815260206004820152601760248201527f46756e647320616c6c6f636174696f6e206661696c656400000000000000000060448201526064016103a7565b60038054600091826111168361182f565b909155506000818152600460205260409020909150806111368982611897565b50600381016111458882611897565b50600481016111548782611897565b5061115f85426117c0565b6001820181905560028201805460ff191690556007820185905560405183917f4e17305b7420128578bd859d024ac630622b92bde2b60f88881995701f736242916111b1918c918c918c918b90611957565b60405180910390a2509695505050505050565b6000546001600160a01b031633146111ef576040516316ccb9cb60e11b815260040160405180910390fd5b600082815260046020526040902060018101544210156112515760405162461bcd60e51b815260206004820152601860248201527f4d61726b657420686173206e6f7420656e64656420796574000000000000000060448201526064016103a7565b600881015460ff16156112a65760405162461bcd60e51b815260206004820181905260248201527f4d61726b65742068617320616c7265616479206265656e207265736f6c76656460448201526064016103a7565b60008260028111156112ba576112ba61145f565b036112f95760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206f7574636f6d6560881b60448201526064016103a7565b818160020160006101000a81548160ff0219169083600281111561131f5761131f61145f565b021790555060088101805460ff1916600117905560405183907f739f283563fb51ab6b89ee95d937b2e63a6cfcb83c385dbebb629f9d97bd43e6906113659085906119a5565b60405180910390a2505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a35050565b80356001600160a01b03811681146113d957600080fd5b919050565b6000602082840312156113f057600080fd5b6113f9826113c2565b9392505050565b60006020828403121561141257600080fd5b5035919050565b6000815180845260005b8181101561143f57602081850181015186830182015201611423565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b6003811061149357634e487b7160e01b600052602160045260246000fd5b9052565b60006101208083526114ab8184018d611419565b905082810360208401526114bf818c611419565b905082810360408401526114d3818b611419565b9150508760608301526114e96080830188611475565b8560a08301528460c08301528360e08301528215156101008301529a9950505050505050505050565b6000806040838503121561152557600080fd5b82359150611535602084016113c2565b90509250929050565b6020815260006113f96020830184611419565b60006101208083526115658184018d611419565b90508a602084015261157a604084018b611475565b828103606084015261158c818a611419565b905082810360808401526115a08189611419565b9150508560a08301528460c08301528360e08301528215156101008301529a9950505050505050505050565b801515811461032657600080fd5b600080604083850312156115ed57600080fd5b8235915060208301356115ff816115cc565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261163157600080fd5b813567ffffffffffffffff8082111561164c5761164c61160a565b604051601f8301601f19908116603f011681019082821181831017156116745761167461160a565b8160405283815286602085880101111561168d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156116c557600080fd5b853567ffffffffffffffff808211156116dd57600080fd5b6116e989838a01611620565b965060208801359150808211156116ff57600080fd5b61170b89838a01611620565b9550604088013591508082111561172157600080fd5b5061172e88828901611620565b9598949750949560608101359550608001359392505050565b6000806040838503121561175a57600080fd5b823591506020830135600381106115ff57600080fd5b600181811c9082168061178457607f821691505b6020821081036117a457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156117d3576117d36117aa565b92915050565b80820281158282048414176117d3576117d36117aa565b60008261180d57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561182457600080fd5b81516113f9816115cc565b600060018201611841576118416117aa565b5060010190565b601f82111561189257600081815260208120601f850160051c8101602086101561186f5750805b601f850160051c820191505b8181101561188e5782815560010161187b565b5050505b505050565b815167ffffffffffffffff8111156118b1576118b161160a565b6118c5816118bf8454611770565b84611848565b602080601f8311600181146118fa57600084156118e25750858301515b600019600386901b1c1916600185901b17855561188e565b600085815260208120601f198616915b828110156119295788860151825594840194600190910190840161190a565b50858210156119475787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60a08152600061196a60a0830188611419565b828103602084015261197c8188611419565b905082810360408401526119908187611419565b60608401959095525050608001529392505050565b602081016117d3828461147556fea2646970667358221220cde1732dfc4a4f57264c1d449c7f5cb118e3961d8c3a80e293f475d41a55ffc664736f6c634300081100330000000000000000000000003ea683354bf8d359cd9ec6e08b5aec291d71d880