0x608060405234801561001057600080fd5b5061198a806100206000396000f3fe60806040526004361061007b5760003560e01c80638456cb591161004e5780638456cb59146100f45780638da5cb5b1461010957806390411a3214610131578063f2fde38b1461015257600080fd5b80635c975abb14610080578063715018a6146100a857806378e3214f146100bf5780638129fc1c146100df575b600080fd5b34801561008c57600080fd5b5060655460ff1660405190151581526020015b60405180910390f35b3480156100b457600080fd5b506100bd610172565b005b3480156100cb57600080fd5b506100bd6100da36600461149c565b610186565b3480156100eb57600080fd5b506100bd6101a6565b34801561010057600080fd5b506100bd6102c4565b34801561011557600080fd5b506033546040516001600160a01b03909116815260200161009f565b61014461013f3660046114c8565b6102d4565b60405190815260200161009f565b34801561015e57600080fd5b506100bd61016d366004611578565b61069c565b61017a610712565b610184600061076c565b565b61018e610712565b6101a26001600160a01b03831633836107be565b5050565b600054610100900460ff16158080156101c65750600054600160ff909116105b806101e05750303b1580156101e0575060005460ff166001145b6102485760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801561026b576000805461ff0019166101001790555b61027361088d565b61027b6108bc565b80156102c1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6102cc610712565b6101846108eb565b60006102de610945565b60008460a00135116103325760405162461bcd60e51b815260206004820152601a60248201527f4d696e2072657475726e2073686f756c64206e6f742062652030000000000000604482015260640161023f565b816103785760405162461bcd60e51b815260206004820152601660248201527510d85b1b0819185d18481cda1bdd5b1908195e1a5cdd60521b604482015260640161023f565b60e0840135600061038c6020870187611578565b905060006103a06040880160208901611578565b90506103b4826001600160a01b031661098b565b6103bf5760006103c5565b86608001355b34146104075760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206d73672e76616c756560781b604482015260640161023f565b600283161561049057610422826001600160a01b031661098b565b156104645760405162461bcd60e51b8152602060048201526012602482015271086d8c2d2da40e8ded6cadc40d2e6408aa8960731b604482015260640161023f565b6104908261047860608a0160408b01611578565b60808a013561048b6101208c018c611595565b6109da565b6000806104a360808a0160608b01611578565b6001600160a01b0316146104c6576104c16080890160608a01611578565b6104c8565b335b90506000600185166104db5760006104ee565b6104ee6001600160a01b03851633610b03565b905060006105056001600160a01b03851684610b03565b90508a6001600160a01b031663a8920d2b348b8b6040518463ffffffff1660e01b815260040161053692919061160c565b6000604051808303818588803b15801561054f57600080fd5b505af1158015610563573d6000803e3d6000fd5b5050505060808b0135905061058b826105856001600160a01b03881687610b03565b90610ba4565b9750600187161561062b576105ba6105ac6001600160a01b03881633610b03565b6105858560808f0135610bb0565b90506105ca60a08c013582610bbc565b6105d88960808e0135610bbc565b10156106265760405162461bcd60e51b815260206004820152601b60248201527f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000604482015260640161023f565b61067f565b8a60a0013588101561067f5760405162461bcd60e51b815260206004820152601b60248201527f52657475726e20616d6f756e74206973206e6f7420656e6f7567680000000000604482015260640161023f565b61068d8b878787858d610bc8565b50505050505050949350505050565b6106a4610712565b6001600160a01b0381166107095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161023f565b6102c18161076c565b6033546001600160a01b031633146101845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161023f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8015610888576107cd8361098b565b15610874576000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461081f576040519150601f19603f3d011682016040523d82523d6000602084013e610824565b606091505b505090508061086e5760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40e8e4c2dce6cccae4408aa8960531b604482015260640161023f565b50505050565b6108886001600160a01b0384168383610c79565b505050565b600054610100900460ff166108b45760405162461bcd60e51b815260040161023f906116e3565b610184610cdc565b600054610100900460ff166108e35760405162461bcd60e51b815260040161023f906116e3565b610184610d0c565b6108f3610945565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109283390565b6040516001600160a01b03909116815260200160405180910390a1565b60655460ff16156101845760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161023f565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14806109c257506001600160a01b038216611010145b806109d457506001600160a01b038216155b92915050565b60e0811415610ae757600080866001600160a01b031663d505accf60e01b8585604051602401610a0b92919061172e565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610a49919061176e565b6000604051808303816000865af19150503d8060008114610a86576040519150601f19603f3d011682016040523d82523d6000602084013e610a8b565b606091505b509150915081610ae457610acb816040518060400160405280601481526020017302832b936b4ba1031b0b636103330b4b632b21d160651b815250610d3f565b60405162461bcd60e51b815260040161023f919061178a565b50505b610afc6001600160a01b038616338686610fab565b5050505050565b6000610b0e8361098b565b15610b2457506001600160a01b038116316109d4565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a082319060240160206040518083038186803b158015610b6557600080fd5b505afa158015610b79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9d91906117bd565b9392505050565b6000610b9d82846117ec565b6000610b9d8284611803565b6000610b9d828461181b565b836001600160a01b0316856001600160a01b0316336001600160a01b03167f76af224a143865a50b41496e1a73622698692c565c1214bc862f18e22d829c5e868a6080013587878d60a001358e60c001358f610100016020810190610c2d9190611578565b604080516001600160a01b03988916815260208101979097528601949094526060850192909252608084015260a083015290911660c082015260e00160405180910390a4505050505050565b6040516001600160a01b03831660248201526044810182905261088890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fe3565b600054610100900460ff16610d035760405162461bcd60e51b815260040161023f906116e3565b6101843361076c565b600054610100900460ff16610d335760405162461bcd60e51b815260040161023f906116e3565b6065805460ff19169055565b60606044835110158015610d78575082600081518110610d6157610d6161183a565b6020910101516001600160f81b031916600160fb1b145b8015610da9575082600181518110610d9257610d9261183a565b6020910101516001600160f81b03191660c360f81b145b8015610dda575082600281518110610dc357610dc361183a565b6020910101516001600160f81b031916607960f81b145b8015610e0b575082600381518110610df457610df461183a565b6020910101516001600160f81b031916600560fd1b145b15610e9557604483810180519091610e239190611803565b84511015610e6b5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015260640161023f565b8281604051602001610e7e929190611850565b6040516020818303038152906040529150506109d4565b82516024148015610ecb575082600081518110610eb457610eb461183a565b6020910101516001600160f81b031916602760f91b145b8015610efc575082600181518110610ee557610ee561183a565b6020910101516001600160f81b031916600960fb1b145b8015610f2d575082600281518110610f1657610f1661183a565b6020910101516001600160f81b031916607b60f81b145b8015610f5e575082600381518110610f4757610f4761183a565b6020910101516001600160f81b031916607160f81b145b15610f8357602483015182610f72826110b5565b604051602001610e7e92919061189f565b81604051602001610f9491906118d4565b604051602081830303815290604052905092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261086e9085906323b872dd60e01b90608401610ca5565b6000611038826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110e19092919063ffffffff16565b80519091501561088857808060200190518101906110569190611901565b6108885760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161023f565b60606109d4826040516020016110cd91815260200190565b6040516020818303038152906040526110f8565b60606110f08484600085611311565b949350505050565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516060919060009061113390600261181b565b61113e906002611803565b67ffffffffffffffff81111561115657611156611923565b6040519080825280601f01601f191660200182016040528015611180576020820181803683370190505b509050600360fc1b8160008151811061119b5761119b61183a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106111ca576111ca61183a565b60200101906001600160f81b031916908160001a90535060005b8451811015611309578260048683815181106112025761120261183a565b016020015182516001600160f81b031990911690911c60f81c90811061122a5761122a61183a565b01602001516001600160f81b0319168261124583600261181b565b611250906002611803565b815181106112605761126061183a565b60200101906001600160f81b031916908160001a9053508285828151811061128a5761128a61183a565b602091010151815160f89190911c600f169081106112aa576112aa61183a565b01602001516001600160f81b031916826112c583600261181b565b6112d0906003611803565b815181106112e0576112e061183a565b60200101906001600160f81b031916908160001a9053508061130181611939565b9150506111e4565b509392505050565b6060824710156113725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161023f565b600080866001600160a01b0316858760405161138e919061176e565b60006040518083038185875af1925050503d80600081146113cb576040519150601f19603f3d011682016040523d82523d6000602084013e6113d0565b606091505b50915091506113e1878383876113ec565b979650505050505050565b60608315611458578251611451576001600160a01b0385163b6114515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161023f565b50816110f0565b6110f0838381511561146d5781518083602001fd5b8060405162461bcd60e51b815260040161023f919061178a565b6001600160a01b03811681146102c157600080fd5b600080604083850312156114af57600080fd5b82356114ba81611487565b946020939093013593505050565b600080600080606085870312156114de57600080fd5b84356114e981611487565b9350602085013567ffffffffffffffff8082111561150657600080fd5b90860190610140828903121561151b57600080fd5b9093506040860135908082111561153157600080fd5b818701915087601f83011261154557600080fd5b81358181111561155457600080fd5b8860208260051b850101111561156957600080fd5b95989497505060200194505050565b60006020828403121561158a57600080fd5b8135610b9d81611487565b6000808335601e198436030181126115ac57600080fd5b83018035915067ffffffffffffffff8211156115c757600080fd5b6020019150368190038213156115dc57600080fd5b9250929050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040808401600586901b8501820187855b888110156116d557878303603f190184528135368b9003607e1901811261165157600080fd5b8a018035845286810135878501528581013586850152608060608083013536849003601e1901811261168257600080fd5b8301803567ffffffffffffffff81111561169b57600080fd5b8036038513156116aa57600080fd5b83838901526116be848901828d85016115e3565b988b0198975050509388019350505060010161162b565b509098975050505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020815260006110f06020830184866115e3565b60005b8381101561175d578181015183820152602001611745565b8381111561086e5750506000910152565b60008251611780818460208701611742565b9190910192915050565b60208152600082518060208401526117a9816040850160208701611742565b601f01601f19169190910160400192915050565b6000602082840312156117cf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156117fe576117fe6117d6565b500390565b60008219821115611816576118166117d6565b500190565b6000816000190483118215151615611835576118356117d6565b500290565b634e487b7160e01b600052603260045260246000fd5b60008351611862818460208801611742565b6508ae4e4dee4560d31b9083019081528351611885816006840160208801611742565b602960f81b60069290910191820152600701949350505050565b600083516118b1818460208801611742565b650a0c2dcd2c6560d31b9083019081528351611885816006840160208801611742565b600082516118e6818460208701611742565b68556e6b6e6f776e282960b81b920191825250600901919050565b60006020828403121561191357600080fd5b81518015158114610b9d57600080fd5b634e487b7160e01b600052604160045260246000fd5b600060001982141561194d5761194d6117d6565b506001019056fea2646970667358221220b749cdb5eed731ef21a619f9f2546a0444a1956467cd5bde56018a76c917f5cb64736f6c63430008090033