0x608060405234801561000f575f80fd5b506116f58061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80636b4dd15814610038578063a6ffa36c14610064575b5f80fd5b61004b610046366004610f4a565b610079565b6040805192835290151560208301520160405180910390f35b610077610072366004610f4a565b61026b565b005b5f8080808061008a868801886110aa565b9250925092505f825167ffffffffffffffff8111156100ab576100ab610fb6565b6040519080825280602002602001820160405280156100d4578160200160208202803683370190505b5090505f5b835181101561014c5761011e8482815181106100f7576100f7611180565b602002602001015184838151811061011157610111611180565b60200260200101516105ca565b5082828151811061013157610131611180565b60029290920b602092830291909101909101526001016100d9565b505f6101588583610800565b9050627fffff811315610175575f80965096505050505050610264565b5f61020382875f8151811061018c5761018c611180565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f39190611194565b6101fe90600a6112aa565b61092f565b905061025033876001895161021891906112b8565b8151811061022857610228611180565b6020026020010151885f8151811061024257610242611180565b6020026020010151846109e8565b9750871561025d57600196505b5050505050505b9250929050565b5f808061027a848601866110aa565b9250925092508151600161028e91906112cb565b83511415806102aa575080516102a59060016112cb565b835114155b156102c8576040516305c3d17360e11b815260040160405180910390fd5b5f336001600160a01b03166341976e09855f815181106102ea576102ea611180565b60200260200101516040518263ffffffff1660e01b815260040161031d91906001600160a01b0391909116815260200190565b602060405180830381865afa158015610338573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035c91906112de565b9050805f036103b157835f8151811061037757610377611180565b602002602001015160405163089bfea760e01b81526004016103a891906001600160a01b0391909116815260200190565b60405180910390fd5b82515f5b818110156105c0575f8682815181106103d0576103d0611180565b602002602001015190505f878360016103e991906112cb565b815181106103f9576103f9611180565b602002602001015190505f87848151811061041657610416611180565b602002602001015190505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561045d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061048191906112f5565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e491906112f5565b9050816001600160a01b0316856001600160a01b03161415801561051a5750806001600160a01b0316856001600160a01b031614155b1561054b57604051638a9bb81760e01b81526001600160a01b038087166004830152841660248201526044016103a8565b816001600160a01b0316846001600160a01b03161415801561057f5750806001600160a01b0316846001600160a01b031614155b156105b057604051638a9bb81760e01b81526001600160a01b038086166004830152841660248201526044016103a8565b85600101955050505050506103b5565b5050505050505050565b5f808263ffffffff165f036106065760405162461bcd60e51b8152602060048201526002602482015261042560f41b60448201526064016103a8565b6040805160028082526060820183525f9260208301908036833701905050905083815f8151811061063957610639611180565b602002602001019063ffffffff16908163ffffffff16815250505f8160018151811061066757610667611180565b602002602001019063ffffffff16908163ffffffff16815250505f80866001600160a01b031663883bdbfd846040518263ffffffff1660e01b81526004016106af9190611310565b5f60405180830381865afa1580156106c9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106f091908101906113be565b915091505f825f8151811061070757610707611180565b60200260200101518360018151811061072257610722611180565b60200260200101516107349190611482565b90505f825f8151811061074957610749611180565b60200260200101518360018151811061076457610764611180565b602002602001015161077691906114af565b9050610786600389900b836114e3565b96505f8260060b1280156107a957506107a3600389900b8361151f565b60060b15155b156107bc57866107b881611540565b9750505b5f6107d46001600160a01b0363ffffffff8b16611561565b90506107f1640100000000600160c01b03602084901b1682611593565b96505050505050509250929050565b5f81516001845161081191906112b8565b146108435760405162461bcd60e51b8152602060048201526002602482015261111360f21b60448201526064016103a8565b60015b825181116109285783818151811061086057610860611180565b60200260200101516001600160a01b03168460018361087f91906112b8565b8151811061088f5761088f611180565b60200260200101516001600160a01b0316106108df57826108b16001836112b8565b815181106108c1576108c1611180565b602002602001015160020b826108d791906115b8565b915081610915565b826108eb6001836112b8565b815181106108fb576108fb611180565b602002602001015160020b8261091191906115d7565b9150815b5080610920816115fe565b915050610846565b5092915050565b5f8061093a84610aee565b90506fffffffffffffffffffffffffffffffff610960846001600160a01b038416611616565b1161099c575f6109796001600160a01b03831680611616565b9050600160c01b61098a8583611616565b610994919061162d565b925050610928565b5f680100000000000000006109ba6001600160a01b03841680611616565b6109c4919061162d565b9050600160801b6109d58583611616565b6109df919061162d565b95945050505050565b60405163baeb325b60e01b81526001600160a01b0383811660048301525f91829187169063baeb325b9060240160408051808303815f875af1158015610a30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a549190611640565b5090505f856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab89190611194565b9050610ac48482610f09565b935083610ad983670de0b6b3a7640000611616565b610ae3919061162d565b979650505050505050565b5f805f8360020b12610b03578260020b610b10565b8260020b610b1090611672565b9050610b1f620d89e71961168c565b62ffffff16811115610b575760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016103a8565b5f816001165f03610b6c57600160801b610b7e565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610bbd576080610bb8826ffff97272373d413259a46990580e213a611616565b901c90505b6004821615610be7576080610be2826ffff2e50f5f656932ef12357cf3c7fdcc611616565b901c90505b6008821615610c11576080610c0c826fffe5caca7e10e4e61c3624eaa0941cd0611616565b901c90505b6010821615610c3b576080610c36826fffcb9843d60f6159c9db58835c926644611616565b901c90505b6020821615610c65576080610c60826fff973b41fa98c081472e6896dfb254c0611616565b901c90505b6040821615610c8f576080610c8a826fff2ea16466c96a3843ec78b326b52861611616565b901c90505b6080821615610cb9576080610cb4826ffe5dee046a99a2a811c461f1969c3053611616565b901c90505b610100821615610ce4576080610cdf826ffcbe86c7900a88aedcffc83b479aa3a4611616565b901c90505b610200821615610d0f576080610d0a826ff987a7253ac413176f2b074cf7815e54611616565b901c90505b610400821615610d3a576080610d35826ff3392b0822b70005940c7a398e4b70f3611616565b901c90505b610800821615610d65576080610d60826fe7159475a2c29b7443b29c7fa6e889d9611616565b901c90505b611000821615610d90576080610d8b826fd097f3bdfd2022b8845ad8f792aa5825611616565b901c90505b612000821615610dbb576080610db6826fa9f746462d870fdf8a65dc1f90e061e5611616565b901c90505b614000821615610de6576080610de1826f70d869a156d2a1b890bb3df62baf32f7611616565b901c90505b618000821615610e11576080610e0c826f31be135f97d08fd981231505542fcfa6611616565b901c90505b62010000821615610e3d576080610e38826f09aa508b5b7a84e1c677de54f3e99bc9611616565b901c90505b62020000821615610e68576080610e63826e5d6af8dedb81196699c329225ee604611616565b901c90505b62040000821615610e92576080610e8d826d2216e584f5fa1ea926041bedfe98611616565b901c90505b62080000821615610eba576080610eb5826b048a170391f7dc42444e8fa2611616565b901c90505b5f8460020b1315610ed357610ed0815f1961162d565b90505b610ee2640100000000826116ac565b15610eee576001610ef0565b5f5b610f019060ff16602083901c6112cb565b949350505050565b5f8160ff16601214610f4157610f2082600a6112aa565b610f3284670de0b6b3a7640000611616565b610f3c919061162d565b610f43565b825b9392505050565b5f8060208385031215610f5b575f80fd5b823567ffffffffffffffff80821115610f72575f80fd5b818501915085601f830112610f85575f80fd5b813581811115610f93575f80fd5b866020828501011115610fa4575f80fd5b60209290920196919550909350505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ff357610ff3610fb6565b604052919050565b5f67ffffffffffffffff82111561101457611014610fb6565b5060051b60200190565b6001600160a01b0381168114611032575f80fd5b50565b5f82601f830112611044575f80fd5b8135602061105961105483610ffb565b610fca565b8083825260208201915060208460051b87010193508684111561107a575f80fd5b602086015b8481101561109f5780356110928161101e565b835291830191830161107f565b509695505050505050565b5f805f606084860312156110bc575f80fd5b833567ffffffffffffffff808211156110d3575f80fd5b6110df87838801611035565b94506020915081860135818111156110f5575f80fd5b61110188828901611035565b945050604086013581811115611115575f80fd5b86019050601f81018713611127575f80fd5b803561113561105482610ffb565b81815260059190911b82018301908381019089831115611153575f80fd5b928401925b8284101561117157833582529284019290840190611158565b80955050505050509250925092565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156111a4575f80fd5b815160ff81168114610f43575f80fd5b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561120257815f19048211156111e8576111e86111b4565b808516156111f557918102915b93841c93908002906111cd565b509250929050565b5f82611218575060016112a4565b8161122457505f6112a4565b816001811461123a576002811461124457611260565b60019150506112a4565b60ff841115611255576112556111b4565b50506001821b6112a4565b5060208310610133831016604e8410600b8410161715611283575081810a6112a4565b61128d83836111c8565b805f19048211156112a0576112a06111b4565b0290505b92915050565b5f610f4360ff84168361120a565b818103818111156112a4576112a46111b4565b808201808211156112a4576112a46111b4565b5f602082840312156112ee575f80fd5b5051919050565b5f60208284031215611305575f80fd5b8151610f438161101e565b602080825282518282018190525f9190848201906040850190845b8181101561134d57835163ffffffff168352928401929184019160010161132b565b50909695505050505050565b5f82601f830112611368575f80fd5b8151602061137861105483610ffb565b8083825260208201915060208460051b870101935086841115611399575f80fd5b602086015b8481101561109f5780516113b18161101e565b835291830191830161139e565b5f80604083850312156113cf575f80fd5b825167ffffffffffffffff808211156113e6575f80fd5b818501915085601f8301126113f9575f80fd5b8151602061140961105483610ffb565b82815260059290921b84018101918181019089841115611427575f80fd5b948201945b838610156114535785518060060b8114611444575f80fd5b8252948201949082019061142c565b9188015191965090935050508082111561146b575f80fd5b5061147885828601611359565b9150509250929050565b600682810b9082900b03667fffffffffffff198112667fffffffffffff821317156112a4576112a46111b4565b6001600160a01b03828116828216039080821115610928576109286111b4565b634e487b7160e01b5f52601260045260245ffd5b5f8160060b8360060b806114f9576114f96114cf565b667fffffffffffff1982145f1982141615611516576115166111b4565b90059392505050565b5f8260060b80611531576115316114cf565b808360060b0791505092915050565b5f8160020b627fffff198103611558576115586111b4565b5f190192915050565b6001600160c01b0382811682821681810283169291811582850482141761158a5761158a6111b4565b50505092915050565b5f6001600160c01b03838116806115ac576115ac6114cf565b92169190910492915050565b8181035f831280158383131683831282161715610928576109286111b4565b8082018281125f8312801582168215821617156115f6576115f66111b4565b505092915050565b5f6001820161160f5761160f6111b4565b5060010190565b80820281158282048414176112a4576112a46111b4565b5f8261163b5761163b6114cf565b500490565b5f8060408385031215611651575f80fd5b8251915060208301518015158114611667575f80fd5b809150509250929050565b5f600160ff1b8201611686576116866111b4565b505f0390565b5f8160020b627fffff1981036116a4576116a46111b4565b5f0392915050565b5f826116ba576116ba6114cf565b50069056fea2646970667358221220e19b6e619c44efd653414bd8a7dce91ff7f5bf0ad377669ea3cc90e603687bb164736f6c63430008170033