0x60806040523480156200001157600080fd5b5060016098556200002162000027565b620000e9565b600054610100900460ff1615620000945760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e7576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6129b680620000f96000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636f071bd9116101045780639ff60424116100a2578063d2105a0011610071578063d2105a00146104a1578063d547741f146104eb578063e0c9ffc6146104fe578063efb2083f1461051157600080fd5b80639ff6042414610462578063a217fddf14610475578063aab336d81461047d578063bc0c2cef1461048e57600080fd5b80637da0a877116100de5780637da0a8771461040457806389d218db146104295780638d3896e91461043c57806391d148541461044f57600080fd5b80636f071bd9146103c057806370a08231146103c85780637ad47ac3146103f157600080fd5b80633717f33e116101715780634924a3221161014b5780634924a3221461034557806354fd4d501461034e5780635604b95b14610356578063572b6c051461039e57600080fd5b80633717f33e146102b65780633de6c17c146102bf578063486ff0cd1461031b57600080fd5b8063192399d1116101ad578063192399d114610224578063248a9ca31461025f5780632f2ff15d1461029057806336568abe146102a357600080fd5b806301ffc9a7146101d457806309db6ebd146101fc578063172df21614610211575b600080fd5b6101e76101e2366004612377565b610524565b60405190151581526020015b60405180910390f35b61020f61020a3660046123bd565b61055b565b005b61020f61021f366004612444565b6107df565b610237610232366004612444565b61083f565b604080519586526020860194909452928401919091526060830152608082015260a0016101f3565b61028261026d36600461245f565b60009081526065602052604090206001015490565b6040519081526020016101f3565b61020f61029e366004612478565b6108d4565b61020f6102b1366004612478565b6108fe565b610282609c5481565b609d54609e54609f5460a05460a1546102e99460ff81169461010090910461ffff16939092909186565b60408051961515875261ffff9095166020870152938501929092526060840152608083015260a082015260c0016101f3565b604080518082019091526005815264322e352e3560d81b60208201525b6040516101f391906124d0565b61028260a25481565b610338610988565b610369610364366004612444565b6109a8565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101f3565b6101e76103ac366004612444565b6097546001600160a01b0391821691161490565b61020f610a6a565b6102826103d6366004612444565b6001600160a01b03166000908152609a602052604090205490565b61020f6103ff366004612503565b610a77565b6097546001600160a01b03165b6040516001600160a01b0390911681526020016101f3565b61020f61043736600461245f565b610ccb565b61020f61044a366004612478565b610cda565b6101e761045d366004612478565b610d08565b61020f610470366004612557565b610d33565b610282600081565b6099546001600160a01b0316610411565b61020f61049c3660046125be565b610f30565b6104d06104af366004612444565b609b6020526000908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016101f3565b61020f6104f9366004612478565b610f95565b61020f61050c3660046125da565b610fba565b609954610411906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061055557506301ffc9a760e01b6001600160e01b03198316145b92915050565b61056483611335565b806105a25760405162461bcd60e51b81526020600482015260096024820152685a65726f206461746160b81b60448201526064015b60405180910390fd5b60006105ac61137a565b90506105c1816105bc609d611389565b6113f9565b6105cb8186611443565b6099546105e2906001600160a01b03168587611572565b6000846001600160a01b031684846040516105fe92919061264f565b6000604051808303816000865af19150503d806000811461063b576040519150601f19603f3d011682016040523d82523d6000602084013e610640565b606091505b50509050806106915760405162461bcd60e51b815260206004820152601e60248201527f526563656976657220636f6e74726163742063616c6c206661696c75726500006044820152606401610599565b609954604051636eb1769f60e11b81523060048201526001600160a01b0387811660248301529091169063dd62ed3e9060440160206040518083038186803b1580156106dc57600080fd5b505afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610714919061265f565b156107715760405162461bcd60e51b815260206004820152602760248201527f526563656976657220636f6e747261637420636f6e73756d65642077726f6e6760448201526608185b5bdd5b9d60ca1b6064820152608401610599565b8560a26000828254610783919061268e565b92505081905550846001600160a01b0316826001600160a01b03167fbc501bf7bd5ef089e9f001c48a714738d50564c5270195333b12fd9fc7676cdd886040516107cf91815260200190565b60405180910390a3505050505050565b6107e881611335565b60006107f261137a565b9050610802816105bc609d611389565b61083b8161080f836116c9565b6001600160a01b0384166000908152609b6020526040902060010154610835919061268e565b846116fb565b5050565b426000808080610864866001600160a01b03166000908152609a602052604090205490565b6001600160a01b0387166000908152609b6020526040902080546001909101549195509350915061089e86610899609d611389565b611787565b6108a8908361268e565b91506108b3866116c9565b6108bd908361268e565b91506108c982856126a6565b905091939590929450565b6000828152606560205260409020600101546108ef8161187a565b6108f9838361188b565b505050565b61090661137a565b6001600160a01b0316816001600160a01b03161461097e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610599565b61083b82826118f7565b606060405180606001604052806021815260200161296060219139905090565b42600080808080806109ba609d611389565b95506109db886001600160a01b03166000908152609a602052604090205490565b6001600160a01b0389166000908152609b6020526040902054909550610a00896116c9565b9450610a0c85826126a6565b6001600160a01b038a166000908152609b60205260409020600101549094509250610a3b89610899609d611389565b610a45908461268e565b925082610a5282886126a6565b610a5c91906126a6565b915050919395979092949650565b610a7561021f61137a565b565b6000610a828161187a565b6001600160a01b038416610acd5760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b6044820152606401610599565b81610b085760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610599565b6001600160a01b038316610b575760405162461bcd60e51b81526020600482015260166024820152755a65726f20726563697069656e74206164647265737360501b6044820152606401610599565b6099546001600160a01b038581169116141580610bfb57506099546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610bb257600080fd5b505afa158015610bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bea919061265f565b82609c54610bf8919061268e565b11155b610c535760405162461bcd60e51b815260206004820152602360248201527f52657472696576616c206f6620636f6c6c61746572616c206e6f7420616c6c6f6044820152621dd95960ea1b6064820152608401610599565b610c676001600160a01b0385168484611967565b826001600160a01b0316846001600160a01b0316610c8361137a565b6001600160a01b03167f016a332373db4b21f361d8ecc178b60d6963726bc6184c3c81723767a513cad285604051610cbd91815260200190565b60405180910390a450505050565b610cd78161044a61137a565b50565b610ce381611335565b6000610ced61137a565b9050610cfd816105bc609d611389565b6108f98184846116fb565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600054610100900460ff1615808015610d535750600054600160ff909116105b80610d6d5750303b158015610d6d575060005460ff166001145b610dd05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610599565b6000805460ff191660011790558015610df3576000805461ff0019166101001790555b6001600160a01b038616610e3f5760405162461bcd60e51b81526020600482015260136024820152725a65726f2063616c6c6572206164647265737360681b6044820152606401610599565b610e4a60008661188b565b609780546001600160a01b0319166001600160a01b0386161790556001600160a01b038316610ebb5760405162461bcd60e51b815260206004820152601b60248201527f5a65726f206f726967696e616c20746f6b656e206164647265737300000000006044820152606401610599565b609980546001600160a01b0319166001600160a01b038516179055610ee2609d8784611997565b8015610f28576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6000610f3b8161187a565b609e544210610f815760405162461bcd60e51b81526020600482015260126024820152711511d148185b1c9958591e481c185cdcd95960721b6044820152606401610599565b61083b610f8c61137a565b609d9084611997565b600082815260656020526040902060010154610fb08161187a565b6108f983836118f7565b610fc26119e8565b806110065760405162461bcd60e51b8152602060048201526014602482015273115b5c1d1e481c9958da5c1a595b9d081b1a5cdd60621b6044820152606401610599565b600061101061137a565b609d805491925061010090910461ffff169060009061102e90611389565b9050600061103c609d611a42565b905060008060005b61ffff81168811156112c95788888261ffff16818110611066576110666126bd565b90506040020160200135600014156110b35760405162461bcd60e51b815260206004820152601060248201526f16995c9bc81b5a5b9d08185b5bdd5b9d60821b6044820152606401610599565b88888261ffff168181106110c9576110c96126bd565b90506040020160200135836110de919061268e565b925061111589898361ffff168181106110f9576110f96126bd565b61110f9260206040909202019081019150612444565b866113f9565b61116989898361ffff1681811061112e5761112e6126bd565b6111449260206040909202019081019150612444565b8a8a8461ffff1681811061115a5761115a6126bd565b90506040020160200135611a84565b6127108661ffff168a8a8461ffff16818110611187576111876126bd565b9050604002016020013561119b91906126d3565b6111a59190612708565b915081609b60008b8b8561ffff168181106111c2576111c26126bd565b6111d89260206040909202019081019150612444565b6001600160a01b03166001600160a01b03168152602001908152602001600020600001600082825461120a919061268e565b9091555084905085838b8b61ffff8616818110611229576112296126bd565b9050604002016020013561123d91906126a6565b61124791906126d3565b6112519190612708565b609b60008b8b8561ffff1681811061126b5761126b6126bd565b6112819260206040909202019081019150612444565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010160008282546112b3919061268e565b909155506112c290508161271c565b9050611044565b506099546112e2906001600160a01b0316873085611b13565b856001600160a01b03167fe984d739def79f9b9c6e05a78e1f69816ef10e8f9a9911de45c1eb977b8a543f898960405161131d92919061273e565b60405180910390a250505050505061083b6001609855565b6001600160a01b038116610cd75760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610599565b6000611384611b51565b905090565b600080826002015483600101546113a0919061268e565b905060008360040154826113b4919061268e565b9050814210156113c8575060009392505050565b8042106113e0576113d884611a42565b949350505050565b60038401546113ef83426126a6565b6113d89190612708565b80611402575050565b6001600160a01b0382166000908152609b602052604090206114248383611787565b816001016000828254611437919061268e565b90915550506002015550565b6001600160a01b0382166000908152609b602052604090208161149b5760405162461bcd60e51b815260206004820152601060248201526f16995c9bc81cddd85c08185b5bdd5b9d60821b6044820152606401610599565b6114a4836116c9565b81600101546114b3919061268e565b8211156115025760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206578636565647320756e6c6f636b65642062616c616e6365006044820152606401610599565b80548211611529578181600001600082825461151e91906126a6565b909155506115689050565b805460009061153890846126a6565b9050801561155a578082600101600082825461155491906126a6565b90915550505b81541561156657600082555b505b6108f98383611b85565b8015806115fb5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b1580156115c157600080fd5b505afa1580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f9919061265f565b155b6116665760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610599565b6040516001600160a01b0383166024820152604481018290526108f990849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611c70565b609e5460009042106116f3576001600160a01b0382166000908152609b6020526040902054610555565b600092915050565b6117058383611443565b60995461171c906001600160a01b03168284611967565b8160a2600082825461172e919061268e565b92505081905550806001600160a01b0316836001600160a01b03167fbc501bf7bd5ef089e9f001c48a714738d50564c5270195333b12fd9fc7676cdd8460405161177a91815260200190565b60405180910390a3505050565b60008161179657506000610555565b6001600160a01b0383166000908152609b602090815260408083208054609a909352908320549092916117c8916126a6565b90508015806117db575081600101548111155b156117eb57600092505050610555565b60008260010154826117fd91906126a6565b9050611809609d611a42565b85141561181a579250610555915050565b600083600201548661182c91906126a6565b905080611840576000945050505050610555565b61184a81836126d3565b9150836002015461185b609d611a42565b61186591906126a6565b61186f9083612708565b979650505050505050565b610cd78161188661137a565b611d42565b6001600160a01b0381166118ed5760405162461bcd60e51b8152602060048201526024808201527f556e61626c6520746f206772616e7420726f6c6520746f207a65726f206164646044820152637265737360e01b6064820152608401610599565b61083b8282611d9b565b6001600160a01b03811661195d5760405162461bcd60e51b815260206004820152602760248201527f556e61626c6520746f207265766f6b6520726f6c652066726f6d207a65726f206044820152666164647265737360c81b6064820152608401610599565b61083b8282611e22565b6040516001600160a01b0383166024820152604481018290526108f990849063a9059cbb60e01b90606401611692565b6119a081611ea7565b6119aa8382611fe9565b7f9440391f91fa4ce6006a238e40dd882ad3c5764538131011c4e2e7842c6a4f1f82826040516119db9291906127b5565b60405180910390a1505050565b60026098541415611a3b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610599565b6002609855565b60008082600301548360040154611a599190612708565b905082600301548360040154611a6f919061281d565b1561055557611a7d81612831565b9392505050565b6001600160a01b038216611ada5760405162461bcd60e51b815260206004820152601860248201527f4d696e7420746f20746865207a65726f206164647265737300000000000000006044820152606401610599565b80609c6000828254611aec919061268e565b90915550506001600160a01b039091166000908152609a6020526040902080549091019055565b6040516001600160a01b0380851660248301528316604482015260648101829052611b4b9085906323b872dd60e01b90608401611692565b50505050565b600060143610801590611b6e57506097546001600160a01b031633145b15611b80575060131936013560601c90565b503390565b6001600160a01b038216611bdb5760405162461bcd60e51b815260206004820152601a60248201527f4275726e2066726f6d20746865207a65726f20616464726573730000000000006044820152606401610599565b6001600160a01b0382166000908152609a602052604090205481811015611c445760405162461bcd60e51b815260206004820152601b60248201527f4275726e20616d6f756e7420657863656564732062616c616e636500000000006044820152606401610599565b6001600160a01b039092166000908152609a6020526040902091819003909155609c8054919091039055565b6000611cc5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120549092919063ffffffff16565b8051909150156108f95780806020019051810190611ce3919061284c565b6108f95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610599565b611d4c8282610d08565b61083b57611d5981612063565b611d64836020612075565b604051602001611d75929190612869565b60408051601f198184030181529082905262461bcd60e51b8252610599916004016124d0565b611da58282610d08565b61083b5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611dde61137a565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b611e2c8282610d08565b1561083b5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19169055611e6361137a565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b612710611eba60408301602084016128de565b61ffff161115611f0c5760405162461bcd60e51b815260206004820152601b60248201527f5447452070657263656e746167652065786365656473203130302500000000006044820152606401610599565b6040810135611f525760405162461bcd60e51b815260206004820152601260248201527105a65726f205447452074696d657374616d760741b6044820152606401610599565b603c81608001351015611f9f5760405162461bcd60e51b8152602060048201526015602482015274151a58dac81c195c9a5bd9081d1bdbc81cdb585b1b605a1b6044820152606401610599565b603c8160a001351015610cd75760405162461bcd60e51b8152602060048201526012602482015271111d5c985d1a5bdb881d1bdbc81cdb585b1b60721b6044820152606401610599565b611ff660208201826128f9565b825460ff191690151517825561201260408201602083016128de565b825461ffff919091166101000262ffff001990911617825560408101356001830155606081013560028301556080810135600383015560a00135600490910155565b60606113d88484600085612211565b60606105556001600160a01b03831660145b606060006120848360026126d3565b61208f90600261268e565b67ffffffffffffffff8111156120a7576120a7612916565b6040519080825280601f01601f1916602001820160405280156120d1576020820181803683370190505b509050600360fc1b816000815181106120ec576120ec6126bd565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061211b5761211b6126bd565b60200101906001600160f81b031916908160001a905350600061213f8460026126d3565b61214a90600161268e565b90505b60018111156121c2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061217e5761217e6126bd565b1a60f81b828281518110612194576121946126bd565b60200101906001600160f81b031916908160001a90535060049490941c936121bb8161292c565b905061214d565b508315611a7d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610599565b6060824710156122725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610599565b600080866001600160a01b0316858760405161228e9190612943565b60006040518083038185875af1925050503d80600081146122cb576040519150601f19603f3d011682016040523d82523d6000602084013e6122d0565b606091505b509150915061186f8783838760608315612348578251612341576001600160a01b0385163b6123415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610599565b50816113d8565b6113d8838381511561235d5781518083602001fd5b8060405162461bcd60e51b815260040161059991906124d0565b60006020828403121561238957600080fd5b81356001600160e01b031981168114611a7d57600080fd5b80356001600160a01b03811681146123b857600080fd5b919050565b600080600080606085870312156123d357600080fd5b843593506123e3602086016123a1565b9250604085013567ffffffffffffffff8082111561240057600080fd5b818701915087601f83011261241457600080fd5b81358181111561242357600080fd5b88602082850101111561243557600080fd5b95989497505060200194505050565b60006020828403121561245657600080fd5b611a7d826123a1565b60006020828403121561247157600080fd5b5035919050565b6000806040838503121561248b57600080fd5b8235915061249b602084016123a1565b90509250929050565b60005b838110156124bf5781810151838201526020016124a7565b83811115611b4b5750506000910152565b60208152600082518060208401526124ef8160408501602087016124a4565b601f01601f19169190910160400192915050565b60008060006060848603121561251857600080fd5b612521846123a1565b925061252f602085016123a1565b9150604084013590509250925092565b600060c0828403121561255157600080fd5b50919050565b6000806000806000610140868803121561257057600080fd5b612579866123a1565b9450612587602087016123a1565b9350612595604087016123a1565b92506125a3606087016123a1565b91506125b2876080880161253f565b90509295509295909350565b600060c082840312156125d057600080fd5b611a7d838361253f565b600080602083850312156125ed57600080fd5b823567ffffffffffffffff8082111561260557600080fd5b818501915085601f83011261261957600080fd5b81358181111561262857600080fd5b8660208260061b850101111561263d57600080fd5b60209290920196919550909350505050565b8183823760009101908152919050565b60006020828403121561267157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156126a1576126a1612678565b500190565b6000828210156126b8576126b8612678565b500390565b634e487b7160e01b600052603260045260246000fd5b60008160001904831182151516156126ed576126ed612678565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612717576127176126f2565b500490565b600061ffff8083168181141561273457612734612678565b6001019392505050565b6020808252818101839052600090604080840186845b87811015612788576001600160a01b0361276d836123a1565b16835281850135858401529183019190830190600101612754565b5090979650505050505050565b8015158114610cd757600080fd5b803561ffff811681146123b857600080fd5b6001600160a01b038316815260e0810182356127d081612795565b80151560208401525061ffff6127e8602085016127a3565b1660408301526040830135606083015260608301356080830152608083013560a083015260a083013560c08301529392505050565b60008261282c5761282c6126f2565b500690565b600060001982141561284557612845612678565b5060010190565b60006020828403121561285e57600080fd5b8151611a7d81612795565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516128a18160178501602088016124a4565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516128d28160288401602088016124a4565b01602801949350505050565b6000602082840312156128f057600080fd5b611a7d826127a3565b60006020828403121561290b57600080fd5b8135611a7d81612795565b634e487b7160e01b600052604160045260246000fd5b60008161293b5761293b612678565b506000190190565b600082516129558184602087016124a4565b919091019291505056fe56657374696e67436c61696d6572556e7265737472696374656420763130302e31a2646970667358221220a9f48d241b7d97aa6a871a09377d571d39e2fe8d752bd5552337587a0e5302d864736f6c63430008090033