0x608060405234801561001057600080fd5b5061001961001e565b6100dd565b600054610100900460ff161561008a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100db576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611f0a806100ec6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f957806395d89b4111610097578063d505accf11610071578063d505accf14610385578063d9d98ce414610398578063dd62ed3e146103ab578063f2fde38b146103be57600080fd5b806395d89b4114610357578063a457c2d71461035f578063a9059cbb1461037257600080fd5b80638129fc1c116100d35780638129fc1c146103115780638456cb591461031957806384b0196e146103215780638da5cb5b1461033c57600080fd5b8063715018a6146102e357806379cc6790146102eb5780637ecebe00146102fe57600080fd5b80633f4ba83a116101665780635c975abb116101405780635c975abb146102895780635cffe9de14610294578063613255ab146102a757806370a08231146102ba57600080fd5b80633f4ba83a1461025957806340c10f191461026357806342966c681461027657600080fd5b806323b872dd116101a257806323b872dd1461021c578063313ce5671461022f5780633644e5151461023e578063395093511461024657600080fd5b806306fdde03146101c9578063095ea7b3146101e757806318160ddd1461020a575b600080fd5b6101d16103d1565b6040516101de91906119ba565b60405180910390f35b6101fa6101f53660046119e2565b610463565b60405190151581526020016101de565b6035545b6040519081526020016101de565b6101fa61022a366004611a0e565b61047d565b604051601281526020016101de565b61020e6104a1565b6101fa6102543660046119e2565b6104b0565b6102616104d2565b005b6102616102713660046119e2565b6104e4565b610261610284366004611a4f565b6104fa565b60975460ff166101fa565b6101fa6102a2366004611a68565b610507565b61020e6102b5366004611b07565b6106f0565b61020e6102c8366004611b07565b6001600160a01b031660009081526033602052604090205490565b610261610718565b6102616102f93660046119e2565b61072a565b61020e61030c366004611b07565b61073f565b61026161075e565b6102616108f0565b610329610900565b6040516101de9796959493929190611b24565b60c9546040516001600160a01b0390911681526020016101de565b6101d161099e565b6101fa61036d3660046119e2565b6109ad565b6101fa6103803660046119e2565b610a28565b610261610393366004611bba565b610a36565b61020e6103a63660046119e2565b610b9a565b61020e6103b9366004611c31565b610bfe565b6102616103cc366004611b07565b610c29565b6060603680546103e090611c6a565b80601f016020809104026020016040519081016040528092919081815260200182805461040c90611c6a565b80156104595780601f1061042e57610100808354040283529160200191610459565b820191906000526020600020905b81548152906001019060200180831161043c57829003601f168201915b5050505050905090565b600033610471818585610c9f565b60019150505b92915050565b60003361048b858285610dc4565b610496858585610e3e565b506001949350505050565b60006104ab610ff4565b905090565b6000336104718185856104c38383610bfe565b6104cd9190611cb4565b610c9f565b6104da610ffe565b6104e2611058565b565b6104ec610ffe565b6104f682826110aa565b5050565b6105043382611177565b50565b6000610512856106f0565b84111561057a5760405162461bcd60e51b815260206004820152602b60248201527f4552433230466c6173684d696e743a20616d6f756e742065786365656473206d60448201526a30bc233630b9b42637b0b760a91b60648201526084015b60405180910390fd5b60006105868686610b9a565b905061059287866110aa565b6040516323e30c8b60e01b81527f439148f0bbc682ca079e46d6e2c2f0c1e3b820f1a291b069d8882abf8cf18dd9906001600160a01b038916906323e30c8b906105ea9033908b908b9088908c908c90600401611cc7565b6020604051808303816000875af1158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d9190611d23565b146106865760405162461bcd60e51b8152602060048201526024808201527f4552433230466c6173684d696e743a20696e76616c69642072657475726e2076604482015263616c756560e01b6064820152608401610571565b600061069c8830610697858a611cb4565b610dc4565b8115806106b057506001600160a01b038116155b156106cd576106c8886106c38489611cb4565b611177565b6106e2565b6106d78887611177565b6106e2888284610e3e565b506001979650505050505050565b60006001600160a01b0382163014610709576000610477565b60355461047790600019611d3c565b610720610ffe565b6104e260006112b4565b610735823383610dc4565b6104f68282611177565b6001600160a01b038116600090815261012f6020526040812054610477565b600054610100900460ff161580801561077e5750600054600160ff909116105b806107985750303b158015610798575060005460ff166001145b6107fb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610571565b6000805460ff19166001179055801561081e576000805461ff0019166101001790555b6108616040518060400160405280600681526020016542756c6c656b60d01b815250604051806040016040528060038152602001621514d560ea1b815250611306565b610869611337565b61087161135e565b61087961138d565b6108a06040518060400160405280600681526020016542756c6c656b60d01b8152506113bc565b6108a8611337565b8015610504576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6108f8610ffe565b6104e2611406565b60006060806000806000606060fb546000801b148015610920575060fc54155b6109645760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610571565b61096c611443565b610974611452565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6060603780546103e090611c6a565b600033816109bb8286610bfe565b905083811015610a1b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610571565b6104968286868403610c9f565b600033610471818585610e3e565b83421115610a865760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610571565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610ab58c611461565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610b108261148a565b90506000610b20828787876114b7565b9050896001600160a01b0316816001600160a01b031614610b835760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610571565b610b8e8a8a8a610c9f565b50505050505050505050565b60006001600160a01b0383163014610bf45760405162461bcd60e51b815260206004820152601b60248201527f4552433230466c6173684d696e743a2077726f6e6720746f6b656e00000000006044820152606401610571565b60005b9392505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b610c31610ffe565b6001600160a01b038116610c965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610571565b610504816112b4565b6001600160a01b038316610d015760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610571565b6001600160a01b038216610d625760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610571565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610dd08484610bfe565b90506000198114610e385781811015610e2b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610571565b610e388484848403610c9f565b50505050565b6001600160a01b038316610ea25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610571565b6001600160a01b038216610f045760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610571565b610f0f8383836114df565b6001600160a01b03831660009081526033602052604090205481811015610f875760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610571565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610fe79086815260200190565b60405180910390a3610e38565b60006104ab6114e7565b60c9546001600160a01b031633146104e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610571565b61106061155b565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166111005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610571565b61110c600083836114df565b806035600082825461111e9190611cb4565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166111d75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610571565b6111e3826000836114df565b6001600160a01b038216600090815260336020526040902054818110156112575760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610571565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610db7565b505050565b60c980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661132d5760405162461bcd60e51b815260040161057190611d65565b6104f682826115a4565b600054610100900460ff166104e25760405162461bcd60e51b815260040161057190611d65565b600054610100900460ff166113855760405162461bcd60e51b815260040161057190611d65565b6104e26115e4565b600054610100900460ff166113b45760405162461bcd60e51b815260040161057190611d65565b6104e2611617565b600054610100900460ff166113e35760405162461bcd60e51b815260040161057190611d65565b61050481604051806040016040528060018152602001603160f81b815250611647565b61140e611696565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861108d3390565b606060fd80546103e090611c6a565b606060fe80546103e090611c6a565b6001600160a01b038116600090815261012f602052604090208054600181018255905b50919050565b6000610477611497610ff4565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006114c8878787876116dc565b915091506114d5816117a0565b5095945050505050565b6112af611696565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6115126118ea565b61151a611943565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60975460ff166104e25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610571565b600054610100900460ff166115cb5760405162461bcd60e51b815260040161057190611d65565b60366115d78382611dfe565b5060376112af8282611dfe565b600054610100900460ff1661160b5760405162461bcd60e51b815260040161057190611d65565b6097805460ff19169055565b600054610100900460ff1661163e5760405162461bcd60e51b815260040161057190611d65565b6104e2336112b4565b600054610100900460ff1661166e5760405162461bcd60e51b815260040161057190611d65565b60fd61167a8382611dfe565b5060fe6116878282611dfe565b5050600060fb81905560fc5550565b60975460ff16156104e25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610571565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156117135750600090506003611797565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611767573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661179057600060019250925050611797565b9150600090505b94509492505050565b60008160048111156117b4576117b4611ebe565b036117bc5750565b60018160048111156117d0576117d0611ebe565b0361181d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610571565b600281600481111561183157611831611ebe565b0361187e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610571565b600381600481111561189257611892611ebe565b036105045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610571565b6000806118f5611443565b80519091501561190c578051602090910120919050565b60fb54801561191b5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b60008061194e611452565b805190915015611965578051602090910120919050565b60fc54801561191b5792915050565b6000815180845260005b8181101561199a5760208185018101518683018201520161197e565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610bf76020830184611974565b6001600160a01b038116811461050457600080fd5b600080604083850312156119f557600080fd5b8235611a00816119cd565b946020939093013593505050565b600080600060608486031215611a2357600080fd5b8335611a2e816119cd565b92506020840135611a3e816119cd565b929592945050506040919091013590565b600060208284031215611a6157600080fd5b5035919050565b600080600080600060808688031215611a8057600080fd5b8535611a8b816119cd565b94506020860135611a9b816119cd565b935060408601359250606086013567ffffffffffffffff80821115611abf57600080fd5b818801915088601f830112611ad357600080fd5b813581811115611ae257600080fd5b896020828501011115611af457600080fd5b9699959850939650602001949392505050565b600060208284031215611b1957600080fd5b8135610bf7816119cd565b60ff60f81b881681526000602060e081840152611b4460e084018a611974565b8381036040850152611b56818a611974565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611ba857835183529284019291840191600101611b8c565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215611bd557600080fd5b8735611be0816119cd565b96506020880135611bf0816119cd565b95506040880135945060608801359350608088013560ff81168114611c1457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611c4457600080fd5b8235611c4f816119cd565b91506020830135611c5f816119cd565b809150509250929050565b600181811c90821680611c7e57607f821691505b60208210810361148457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561047757610477611c9e565b6001600160a01b03878116825286166020820152604081018590526060810184905260a06080820181905281018290526000828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b600060208284031215611d3557600080fd5b5051919050565b8181038181111561047757610477611c9e565b634e487b7160e01b600052604160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f8211156112af57600081815260208120601f850160051c81016020861015611dd75750805b601f850160051c820191505b81811015611df657828155600101611de3565b505050505050565b815167ffffffffffffffff811115611e1857611e18611d4f565b611e2c81611e268454611c6a565b84611db0565b602080601f831160018114611e615760008415611e495750858301515b600019600386901b1c1916600185901b178555611df6565b600085815260208120601f198616915b82811015611e9057888601518255948401946001909101908401611e71565b5085821015611eae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220321c32bc07678e03a354363ee8eea68d9c8a795ff8e13d0cf771cf42b4b0530264736f6c63430008120033