0x608060405234801561000f575f80fd5b5060015f55610c6a806100215f395ff3fe608060405234801561000f575f80fd5b5060043610610076575f3560e01c80632ad47c271461007a5780636282a0141461008f57806371eca8dc1461013f5780638147ef37146101b157806388494e05146101d2578063b124e2f71461021b578063b192213c1461022e578063d7ec901914610262575b5f80fd5b61008d610088366004610954565b610285565b005b6100f361009d3660046109c3565b600260208181525f93845260408085209091529183529120805460018201549282015460038301546004840154600585015460069095015493959462ffffff90931693919290916001600160a01b039091169087565b60408051978852602088019690965262ffffff90941694860194909452606085019190915260808401526001600160a01b0390911660a083015260c082015260e0015b60405180910390f35b61015261014d3660046109f4565b6103d1565b6040516101369190815181526020808301519082015260408083015162ffffff1690820152606080830151908201526080808301519082015260a0808301516001600160a01b03169082015260c0918201519181019190915260e00190565b6101c46101bf366004610a0d565b6104ed565b604051908152602001610136565b6102076101e0366004610a26565b600360209081525f938452604080852082529284528284209052825290205462ffffff1681565b60405162ffffff9091168152602001610136565b61008d610229366004610a66565b610504565b61025061023c3660046109f4565b60016020525f908152604090205460ff1681565b60405160ff9091168152602001610136565b610275610270366004610ab1565b610567565b6040519015158152602001610136565b858710801561029357505f87115b61029b575f80fd5b5f8860ff165f036102f657335f908152600160205260408120805460ff16916102c383610bb0565b82546101009290920a60ff818102199093169183160217909155335f9081526001602052604090205416915061031a9050565b50335f90815260016020526040902054889060ff908116908216111561031a575f80fd5b6040805160e0810182529889526020808a0198895262ffffff9687168a830190815260608b0196875260808b019889526001600160a01b0395861660a08c0190815260c08c01958652335f908152600280855285822060ff979097168252959093529290912099518a55975160018a01559651908801805462ffffff19169190951617909355905160038601559151600485015591516005840180546001600160a01b031916919092161790555160069091015550565b6103d96108d0565b6001600160a01b0382165f9081526001602052604090205460ff166103fc6108d0565b60015b8260ff168160ff16116104e5576001600160a01b038086165f90815260026020818152604080842060ff87168552825292839020835160e08101855281548082526001830154938201939093529281015462ffffff16938301939093526003830154606083015260048301546080830152600583015490931660a082015260069091015460c082015290421080159061049b5750428160200151115b80156104a957506080810151155b156104d25782515f036104be578092506104d2565b8260600151816060015110156104d2578092505b50806104dd81610bb0565b9150506103ff565b509392505050565b5f806104f933846106f9565b606001519392505050565b335f90815260036020908152604080832060ff8616845282528083206001600160a01b03871684529091528120805483929061054690849062ffffff16610bce565b92506101000a81548162ffffff021916908362ffffff160217905550505050565b5f8061057333846106f9565b80519091504210806105885750806020015142115b15610596575f9150506106f1565b5f816040015162ffffff161180156105f75750604080820151335f9081526003602090815283822060ff8816835281528382206001600160a01b038b1683529052919091205462ffffff918216916105f091889116610bce565b62ffffff16115b15610605575f9150506106f1565b5f8160c00151118015610688575060c081015160a08201516040516370a0823160e01b81526001600160a01b038981166004830152909116906370a0823190602401602060405180830381865afa158015610662573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106869190610bf1565b105b15610696575f9150506106f1565b60808101516106a95760019150506106f1565b6040516001600160601b0319606088901b1660208201525f906034016040516020818303038152906040528051906020012090506106ec85836080015183610848565b925050505b949350505050565b6107016108d0565b6001600160a01b0383165f9081526001602052604090205460ff16801580159061073157508060ff168360ff1611155b61076d5760405162461bcd60e51b8152602060048201526008602482015267085c1a185cd9525960c21b60448201526064015b60405180910390fd5b8260ff165f036107c4575f610781856103d1565b80519091506107bb5760405162461bcd60e51b815260206004820152600660248201526521706861736560d01b6044820152606401610764565b91506108429050565b50506001600160a01b038083165f90815260026020818152604080842060ff87168552825292839020835160e081018552815481526001820154928101929092529182015462ffffff16928101929092526003810154606083015260048101546080830152600581015490921660a082015260069091015460c08201525b92915050565b5f82610854858461085d565b14949350505050565b5f81815b84518110156104e55761088d8286838151811061088057610880610c08565b60200260200101516108a1565b91508061089981610c1c565b915050610861565b5f8183106108bb575f8281526020849052604090206108c9565b5f8381526020839052604090205b9392505050565b6040518060e001604052805f81526020015f81526020015f62ffffff1681526020015f81526020015f80191681526020015f6001600160a01b031681526020015f81525090565b803560ff81168114610927575f80fd5b919050565b803562ffffff81168114610927575f80fd5b80356001600160a01b0381168114610927575f80fd5b5f805f805f805f80610100898b03121561096c575f80fd5b61097589610917565b975060208901359650604089013595506060890135945061099860808a0161092c565b935060a089013592506109ad60c08a0161093e565b915060e089013590509295985092959890939650565b5f80604083850312156109d4575f80fd5b6109dd8361093e565b91506109eb60208401610917565b90509250929050565b5f60208284031215610a04575f80fd5b6108c98261093e565b5f60208284031215610a1d575f80fd5b6108c982610917565b5f805f60608486031215610a38575f80fd5b610a418461093e565b9250610a4f60208501610917565b9150610a5d6040850161093e565b90509250925092565b5f805f60608486031215610a78575f80fd5b610a818461093e565b9250610a8f60208501610917565b9150610a5d6040850161092c565b634e487b7160e01b5f52604160045260245ffd5b5f805f8060808587031215610ac4575f80fd5b610acd8561093e565b93506020610adc81870161092c565b935060408601356001600160401b0380821115610af7575f80fd5b818801915088601f830112610b0a575f80fd5b813581811115610b1c57610b1c610a9d565b8060051b604051601f19603f83011681018181108582111715610b4157610b41610a9d565b60405291825284820192508381018501918b831115610b5e575f80fd5b938501935b82851015610b7c57843584529385019392850192610b63565b809750505050505050610b9160608601610917565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b5f60ff821660ff8103610bc557610bc5610b9c565b60010192915050565b62ffffff818116838216019080821115610bea57610bea610b9c565b5092915050565b5f60208284031215610c01575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201610c2d57610c2d610b9c565b506001019056fea2646970667358221220731bd9545cdc922da4c5f1cfc1ebd3a5a4e75b0b29d85b2d3cc9af27fbf5720b64736f6c63430008140033