0x60a06040523060601b60805234801561001757600080fd5b5060805160601c61277461005260003960008181610967015281816109a701528181610a9001528181610ad00152610b4801526127746000f3fe6080604052600436106101615760003560e01c80634f1ef286116100c15780638129fc1c1161007a5780638129fc1c146104265780638456cb591461043b57806391d1485414610450578063a217fddf14610470578063c0762e5e14610485578063d547741f146104a5578063eb6d3a11146104c557600080fd5b80634f1ef2861461035957806352d1902d1461036c5780635c975abb1461038157806366b58d5014610399578063735de9f7146103b9578063737abc35146103f257600080fd5b80632f2ff15d1161011e5780632f2ff15d1461026457806335c29d7b1461028657806336568abe146102a65780633659cfe6146102c65780633f4ba83a146102e657806343cbfb2a146102fb5780634a6a749c1461031d57600080fd5b806301ffc9a7146101665780630b2047a71461019b578063248a9ca3146101dd5780632584041a1461020d5780632adc5c811461022f5780632e732df314610242575b600080fd5b34801561017257600080fd5b506101866101813660046121f9565b6104da565b60405190151581526020015b60405180910390f35b3480156101a757600080fd5b506101cf7f9476379636bf56df3e6631bc65f1e572b6a1788c0fdd3a136b50ed1378fe407681565b604051908152602001610192565b3480156101e957600080fd5b506101cf6101f83660046121a5565b60009081526065602052604090206001015490565b34801561021957600080fd5b506101cf60008051602061269883398151915281565b6101cf61023d366004612261565b610511565b34801561024e57600080fd5b506101cf6000805160206126b883398151915281565b34801561027057600080fd5b5061028461027f3660046121d5565b6106b5565b005b34801561029257600080fd5b506101cf6102a1366004612221565b6106e0565b3480156102b257600080fd5b506102846102c13660046121d5565b6108de565b3480156102d257600080fd5b506102846102e1366004611f18565b61095c565b3480156102f257600080fd5b50610284610a25565b34801561030757600080fd5b506101cf60008051602061271f83398151915281565b34801561032957600080fd5b50610186610338366004611f50565b61016060209081526000928352604080842090915290825290205460ff1681565b610284610367366004612050565b610a85565b34801561037857600080fd5b506101cf610b3b565b34801561038d57600080fd5b5060975460ff16610186565b3480156103a557600080fd5b506102846103b4366004611f88565b610be9565b3480156103c557600080fd5b5061015f546103da906001600160a01b031681565b6040516001600160a01b039091168152602001610192565b3480156103fe57600080fd5b506101cf7fc54e4dbf791a2ad6e817698d30611a20a6433c37601fc557361e54d1998ce20781565b34801561043257600080fd5b50610284610d17565b34801561044757600080fd5b50610284610dc2565b34801561045c57600080fd5b5061018661046b3660046121d5565b610e21565b34801561047c57600080fd5b506101cf600081565b34801561049157600080fd5b506102846104a0366004611f18565b610e4c565b3480156104b157600080fd5b506102846104c03660046121d5565b610edc565b3480156104d157600080fd5b506103da610f02565b60006001600160e01b03198216637965db0b60e01b148061050b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061051f60975460ff1690565b156105455760405162461bcd60e51b815260040161053c90612488565b60405180910390fd5b8161056357604051630309cb8760e51b815260040160405180910390fd5b600061057042603c6125dc565b61015f54604080516315ab88c960e31b815290519293506000926001600160a01b0390921691637ff36ab5918791859161060991869163ad5c4648916004808301926020929190829003018186803b1580156105cb57600080fd5b505afa1580156105df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106039190611f34565b8a610f85565b33876040518663ffffffff1660e01b815260040161062a949392919061235a565b6000604051808303818588803b15801561064357600080fd5b505af1158015610657573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261068091908101906120f2565b9050806001815181106106a357634e487b7160e01b600052603260045260246000fd5b60200260200101519250505092915050565b6000828152606560205260409020600101546106d1813361118f565b6106db83836111f3565b505050565b60006106ee60975460ff1690565b1561070b5760405162461bcd60e51b815260040161053c90612488565b8161072957604051630309cb8760e51b815260040160405180910390fd5b600061073642603c6125dc565b905061074d6001600160a01b038616333086611279565b604051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d602482015283906001600160a01b0387169063dd62ed3e9060440160206040518083038186803b1580156107a857600080fd5b505afa1580156107bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e091906121bd565b101561080e5761080e6001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d856112ea565b61015f546000906001600160a01b03166338ed1739858361082f8a8a610f85565b33876040518663ffffffff1660e01b815260040161085195949392919061254b565b600060405180830381600087803b15801561086b57600080fd5b505af115801561087f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108a791908101906120f2565b9050806001815181106108ca57634e487b7160e01b600052603260045260246000fd5b6020026020010151925050505b9392505050565b6001600160a01b038116331461094e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161053c565b61095882826113ab565b5050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109a55760405162461bcd60e51b815260040161053c906123f0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109d7611412565b6001600160a01b0316146109fd5760405162461bcd60e51b815260040161053c9061243c565b610a068161142e565b60408051600080825260208201909252610a2291839190611462565b50565b60975460ff16610a475760405162461bcd60e51b815260040161053c906123c2565b610a5f60008051602061269883398151915233610e21565b610a7b576040516282b42960e81b815260040160405180910390fd5b610a836115dc565b565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610ace5760405162461bcd60e51b815260040161053c906123f0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b00611412565b6001600160a01b031614610b265760405162461bcd60e51b815260040161053c9061243c565b610b2f8261142e565b61095882826001611462565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bd65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b606482015260840161053c565b506000805160206126d883398151915290565b610c137fc54e4dbf791a2ad6e817698d30611a20a6433c37601fc557361e54d1998ce20733610e21565b610c2f576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0383161580610c4c57506001600160a01b038216155b80610c91575060006001600160a01b031681600081518110610c7e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316145b15610caf5760405163e6c4247b60e01b815260040160405180910390fd5b604080518082018252600180825260208083018581526001600160a01b03888116600090815261016084528681209189168152908352949094208351815460ff191690151517815593518051939493610d0f938501929190910190611e9e565b505050505050565b600054610100900460ff16610d325760005460ff1615610d36565b303b155b610d525760405162461bcd60e51b815260040161053c906124b2565b600054610100900460ff16158015610d74576000805461ffff19166101011790555b610d7c611648565b610d8760003361172c565b61015f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790558015610a22576000805461ff001916905550565b60975460ff1615610de55760405162461bcd60e51b815260040161053c90612488565b610dfd60008051602061271f83398151915233610e21565b610e19576040516282b42960e81b815260040160405180910390fd5b610a83611736565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610e767f9476379636bf56df3e6631bc65f1e572b6a1788c0fdd3a136b50ed1378fe407633610e21565b610e92576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610eb95760405163e6c4247b60e01b815260040160405180910390fd5b61015f80546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260656020526040902060010154610ef8813361118f565b6106db83836113ab565b61015f54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c4648916004808301926020929190829003018186803b158015610f4857600080fd5b505afa158015610f5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f809190611f34565b905090565b6001600160a01b038083166000908152610160602090815260408083209385168352929052205460609060ff161561103b576001600160a01b038084166000908152610160602090815260408083209386168352928152908290206001018054835181840281018401909452808452909183018282801561102f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611011575b5050505050905061050b565b6040805160038082526080820190925260009160208201606080368337019050509050838160008151811061108057634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920181019190915261015f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156110d557600080fd5b505afa1580156110e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110d9190611f34565b8160018151811061112e57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050828160028151811061117057634e487b7160e01b600052603260045260246000fd5b6001600160a01b0390921660209283029190910190910152905061050b565b6111998282610e21565b610958576111b1816001600160a01b0316601461178e565b6111bc83602061178e565b6040516020016111cd9291906122eb565b60408051601f198184030181529082905262461bcd60e51b825261053c9160040161238f565b6111fd8282610e21565b6109585760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112353390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6040516001600160a01b03808516602483015283166044820152606481018290526112e49085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611970565b50505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e9060440160206040518083038186803b15801561133657600080fd5b505afa15801561134a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136e91906121bd565b61137891906125dc565b6040516001600160a01b0385166024820152604481018290529091506112e490859063095ea7b360e01b906064016112ad565b6113b58282610e21565b156109585760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000805160206126d8833981519152546001600160a01b031690565b6114466000805160206126b883398151915233610e21565b610a22576040516282b42960e81b815260040160405180910390fd5b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611495576106db83611a42565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ce57600080fd5b505afa9250505080156114fe575060408051601f3d908101601f191682019092526114fb918101906121bd565b60015b6115615760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161053c565b6000805160206126d883398151915281146115d05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161053c565b506106db838383611ade565b60975460ff166115fe5760405162461bcd60e51b815260040161053c906123c2565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff166116635760005460ff1615611667565b303b155b6116835760405162461bcd60e51b815260040161053c906124b2565b600054610100900460ff161580156116a5576000805461ffff19166101011790555b6116ad611b03565b6116b5611b32565b6116bd611b59565b6116c5611b32565b6116d060003361172c565b6116e860008051602061271f8339815191523361172c565b6117006000805160206126988339815191523361172c565b6117186000805160206126b88339815191523361172c565b8015610a22576000805461ff001916905550565b61095882826111f3565b60975460ff16156117595760405162461bcd60e51b815260040161053c90612488565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861162b3390565b6060600061179d8360026125f4565b6117a89060026125dc565b67ffffffffffffffff8111156117ce57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117f8576020820181803683370190505b509050600360fc1b8160008151811061182157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061185e57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060006118828460026125f4565b61188d9060016125dc565b90505b6001811115611921576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106118cf57634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106118f357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c9361191a8161263f565b9050611890565b5083156108d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161053c565b60006119c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b889092919063ffffffff16565b8051909150156106db57808060200190518101906119e39190612185565b6106db5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161053c565b6001600160a01b0381163b611aaf5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161053c565b6000805160206126d883398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611ae783611b9f565b600082511180611af45750805b156106db576112e48383611bdf565b600054610100900460ff16611b2a5760405162461bcd60e51b815260040161053c90612500565b610a83611cd3565b600054610100900460ff16610a835760405162461bcd60e51b815260040161053c90612500565b600054610100900460ff16611b805760405162461bcd60e51b815260040161053c90612500565b610a83611d01565b6060611b978484600085611d34565b949350505050565b611ba881611a42565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611c475760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161053c565b600080846001600160a01b031684604051611c6291906122cf565b600060405180830381855af49150503d8060008114611c9d576040519150601f19603f3d011682016040523d82523d6000602084013e611ca2565b606091505b5091509150611cca82826040518060600160405280602781526020016126f860279139611e65565b95945050505050565b600054610100900460ff16611cfa5760405162461bcd60e51b815260040161053c90612500565b600160c955565b600054610100900460ff16611d285760405162461bcd60e51b815260040161053c90612500565b6097805460ff19169055565b606082471015611d955760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161053c565b6001600160a01b0385163b611dec5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053c565b600080866001600160a01b03168587604051611e0891906122cf565b60006040518083038185875af1925050503d8060008114611e45576040519150601f19603f3d011682016040523d82523d6000602084013e611e4a565b606091505b5091509150611e5a828286611e65565b979650505050505050565b60608315611e745750816108d7565b825115611e845782518084602001fd5b8160405162461bcd60e51b815260040161053c919061238f565b828054828255906000526020600020908101928215611ef3579160200282015b82811115611ef357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ebe565b50611eff929150611f03565b5090565b5b80821115611eff5760008155600101611f04565b600060208284031215611f29578081fd5b81356108d781612682565b600060208284031215611f45578081fd5b81516108d781612682565b60008060408385031215611f62578081fd5b8235611f6d81612682565b91506020830135611f7d81612682565b809150509250929050565b600080600060608486031215611f9c578081fd5b8335611fa781612682565b9250602084810135611fb881612682565b9250604085013567ffffffffffffffff811115611fd3578283fd5b8501601f81018713611fe3578283fd5b8035611ff6611ff1826125b8565b612587565b8082825284820191508484018a868560051b8701011115612015578687fd5b8694505b8385101561204057803561202c81612682565b835260019490940193918501918501612019565b5080955050505050509250925092565b60008060408385031215612062578182fd5b823561206d81612682565b915060208381013567ffffffffffffffff8082111561208a578384fd5b818601915086601f83011261209d578384fd5b8135818111156120af576120af61266c565b6120c1601f8201601f19168501612587565b915080825287848285010111156120d6578485fd5b8084840185840137810190920192909252919491935090915050565b60006020808385031215612104578182fd5b825167ffffffffffffffff81111561211a578283fd5b8301601f8101851361212a578283fd5b8051612138611ff1826125b8565b80828252848201915084840188868560051b8701011115612157578687fd5b8694505b8385101561217957805183526001949094019391850191850161215b565b50979650505050505050565b600060208284031215612196578081fd5b815180151581146108d7578182fd5b6000602082840312156121b6578081fd5b5035919050565b6000602082840312156121ce578081fd5b5051919050565b600080604083850312156121e7578182fd5b823591506020830135611f7d81612682565b60006020828403121561220a578081fd5b81356001600160e01b0319811681146108d7578182fd5b600080600060608486031215612235578081fd5b833561224081612682565b9250602084013561225081612682565b929592945050506040919091013590565b60008060408385031215612273578182fd5b823561227e81612682565b946020939093013593505050565b6000815180845260208085019450808401835b838110156122c45781516001600160a01b03168752958201959082019060010161229f565b509495945050505050565b600082516122e1818460208701612613565b9190910192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161231d816017850160208801612613565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161234e816028840160208801612613565b01602801949350505050565b848152608060208201526000612373608083018661228c565b6001600160a01b03949094166040830152506060015292915050565b60208152600082518060208401526123ae816040850160208701612613565b601f01601f19169190910160400192915050565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b85815284602082015260a06040820152600061256a60a083018661228c565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156125b0576125b061266c565b604052919050565b600067ffffffffffffffff8211156125d2576125d261266c565b5060051b60200190565b600082198211156125ef576125ef612656565b500190565b600081600019048311821515161561260e5761260e612656565b500290565b60005b8381101561262e578181015183820152602001612616565b838111156112e45750506000910152565b60008161264e5761264e612656565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a2257600080fdfe8803b79cf103fbbe05f367aebd7133df95e66e35cd2fd4354572749b340fa030a4254957378b1b029002037cdde9a929320dca7844d0cd60835508c4a5da7077360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564d45448057dd4bec91524a9aa1c58ba5873b99fee065c4fe61a84ea8374011cbaa2646970667358221220467948c87abe1763d041ced4d4791551ed65b2d79321f7ec508c0c8c2d702f7664736f6c63430008040033