0x608060405234801561001057600080fd5b50600180556124ee806100246000396000f3fe6080604052600436106100c65760003560e01c8063ab3dfb021161007f578063c5547cb211610059578063c5547cb2146102c1578063f3db125a146102e1578063f3fef3a314610342578063f8c8765e1461036257600080fd5b8063ab3dfb0214610254578063ac9650d814610274578063b3dd4ec4146102a157600080fd5b8063365a86fc146101435780633fc8cef314610180578063572c8ce3146101a05780637a0ebc88146101f457806398c01e2a14610214578063a407e8c91461023457600080fd5b3661013e576004546001600160a01b0316331461013c576004805460408051630d0e30db60e41b815290516001600160a01b039092169263d0e30db0923492808301926000929182900301818588803b15801561012257600080fd5b505af1158015610136573d6000803e3d6000fd5b50505050505b005b600080fd5b34801561014f57600080fd5b50600254610163906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018c57600080fd5b50600454610163906001600160a01b031681565b3480156101ac57600080fd5b506101c06101bb366004611958565b610382565b6040805162ffffff909316835281516001600160801b031660208085019190915290910151600f0b90820152606001610177565b34801561020057600080fd5b50600354610163906001600160a01b031681565b34801561022057600080fd5b5061013c61022f366004611958565b6104c6565b34801561024057600080fd5b5061013c61024f3660046119ea565b6105ed565b34801561026057600080fd5b5061013c61026f366004611a44565b610639565b34801561028057600080fd5b5061029461028f366004611adf565b61086a565b6040516101779190611ba3565b3480156102ad57600080fd5b5061013c6102bc366004611c28565b61095d565b3480156102cd57600080fd5b5061013c6102dc366004611cf2565b610a12565b3480156102ed57600080fd5b506103016102fc366004611d42565b610be3565b6040805183518152602080850151908201528382015191810191909152606080840151908201526080928301519281019290925260a082015260c001610177565b34801561034e57600080fd5b5061013c61035d366004611d42565b610d2c565b34801561036e57600080fd5b5061013c61037d366004611d6e565b610e51565b60408051808201909152600080825260208201819052906103a1611029565b6002546001600160a01b0316331480159061042557506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa1580156103ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104239190611dda565b155b1561044357604051632a2e5c9d60e11b815260040160405180910390fd5b604051633a55136160e21b81526001600160a01b0385169063e9544d849061046f908690600401611df5565b6060604051808303816000875af115801561048e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b29190611e4f565b915091506104bf60018055565b9250929050565b6104ce611029565b6002546001600160a01b0316331480159061055257506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa15801561052c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105509190611dda565b155b1561057057604051632a2e5c9d60e11b815260040160405180910390fd5b6040516350347fcb60e01b81526001600160a01b038316906350347fcb9061059c908490600401611df5565b60a0604051808303816000875af11580156105bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105df9190611f28565b506105e960018055565b5050565b6105f5611029565b6002546001600160a01b03163314610620576040516313bd2e8360e31b815260040160405180910390fd5b61062b838383611082565b61063460018055565b505050565b610641611029565b6002546001600160a01b031633148015906106c557506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa15801561069f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c39190611dda565b155b156106e357604051632a2e5c9d60e11b815260040160405180910390fd5b60006106ed611850565b60005b60038110156107b057600084826003811061070d5761070d611f44565b6020020151905060005b600a81101561079b57600061072d826009611f70565b610738906018611f83565b6001600160f01b038416901c9050627ffffe19600282900b0161075b575061079b565b808587601e811061076e5761076e611f44565b60029290920b602090920201528561078581611f9a565b965050508061079381611f9a565b915050610717565b505080806107a890611f9a565b9150506106f0565b506000826001600160401b038111156107cb576107cb6118a5565b6040519080825280602002602001820160405280156107f4578160200160208202803683370190505b50905060005b83811015610852578281601e811061081457610814611f44565b602002015182828151811061082b5761082b611f44565b602002602001019060020b908160020b81525050808061084a90611f9a565b9150506107fa565b5061085e868683611173565b50505061063460018055565b604080516000815260208101909152606090826001600160401b03811115610894576108946118a5565b6040519080825280602002602001820160405280156108c757816020015b60608152602001906001900390816108b25790505b50915060005b8381101561095457610924308686848181106108eb576108eb611f44565b90506020028101906108fd9190611fb3565b8560405160200161091093929190611ff9565b604051602081830303815290604052611312565b83828151811061093657610936611f44565b6020026020010181905250808061094c90611f9a565b9150506108cd565b50505b92915050565b610965611029565b6002546001600160a01b031633148015906109e957506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e79190611dda565b155b15610a0757604051632a2e5c9d60e11b815260040160405180910390fd5b61062b838383611173565b610a1a611029565b6002546001600160a01b03163314801590610a9e57506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c9190611dda565b155b15610abc57604051632a2e5c9d60e11b815260040160405180910390fd5b6127108161ffff161115610ae35760405163648564d360e01b815260040160405180910390fd5b6000610af084843061133e565b90508060200151600f0b600014610bd95760006127108361ffff168360200151610b1990612020565b600f0b610b26919061204f565b610b309190612095565b90506000610b6385836000808613610b4c57627fffff19610b51565b627fffff5b610b5c4260016120c3565b600061140c565b6040516350347fcb60e01b81529091506001600160a01b038716906350347fcb90610b92908490600401611df5565b60a0604051808303816000875af1158015610bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd59190611f28565b5050505b5061063460018055565b610c156040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6000610c1f611029565b6002546001600160a01b03163314801590610ca357506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca19190611dda565b155b15610cc157604051632a2e5c9d60e11b815260040160405180910390fd5b604051634a45e24160e11b8152600481018490526001600160a01b0385169063948bc4829060240160c0604051808303816000875af1158015610d08573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b291906120d6565b610d34611029565b6002546001600160a01b03163314801590610db857506002546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa158015610d92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db69190611dda565b155b15610dd657604051632a2e5c9d60e11b815260040160405180910390fd5b60025460408051631315198160e01b815290516000926001600160a01b03169163131519819160048083019260209291908290030181865afa158015610e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e449190612103565b90506105df838284611082565b600054610100900460ff1615808015610e715750600054600160ff909116105b80610e8b5750303b158015610e8b575060005460ff166001145b610ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610f16576000805461ff0019166101001790555b600280546001600160a01b038088166001600160a01b0319928316179092556003805487841690831617905560048054928616929091169190911790556000610f5e8361147e565b505060035460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291925082169063095ea7b3906044016020604051808303816000875af1158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190611dda565b50508015611022576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60026001540361107b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610eea565b6002600155565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156110c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ed9190612120565b90508181101561110057611100846115f1565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561114f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190611dda565b6000600882516111839190612139565b156111a65760088251611196919061214d565b6111a19060016120c3565b6111b4565b600882516111b4919061214d565b90506000805b8281101561130a576000805b6008811015611242576018826001600160c01b0316901b9150600186516111ed9190611f70565b84116112195785848151811061120557611205611f44565b602002602001015162ffffff168217611220565b627fffff82175b91508361122c81611f9a565b945050808061123a90611f9a565b9150506111c6565b506001600160a01b03871663c4d252f561129288846112624260016120c3565b60008363ffffffff166020846001600160c01b0316901b1760e08363ffffffff16901b1760001b90509392505050565b6040518263ffffffff1660e01b81526004016112b091815260200190565b610600604051808303816000875af11580156112d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f49190612161565b505050808061130290611f9a565b9150506111ba565b505050505050565b60606113378383604051806060016040528060278152602001612492602791396116d5565b9392505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915260408051602081018252600080825291516314b4fb0d60e11b81526001600160a01b03871691632969f61a916113a89188918891600391600401612239565b600060405180830381865afa1580156113c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113ed919081019061228b565b905080806020019051810190611403919061231e565b95945050505050565b61141461186f565b63ffffffff8716602085901b66ffffff000000001617603884901b6affffffff0000000000000016605884901b61ffff60581b16171781526fffffffffffffffffffffffffffffffff19608087901b166001600160801b0386161760208201529695505050505050565b604080516003808252608082019092526000918291829182919060208201606080368337019050509050600460056006836000815181106114c1576114c1611f44565b60200260200101846001815181106114db576114db611f44565b60200260200101856002815181106114f5576114f5611f44565b6020908102919091010192909252919052526040516305725b6960e41b81526000906001600160a01b03871690635725b6909061153690859060040161238e565b600060405180830381865afa158015611553573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261157b91908101906123d2565b90508060008151811061159057611590611f44565b6020026020010151945060ff801660a0826000815181106115b3576115b3611f44565b6020026020010151901c1693506115e3816001815181106115d6576115d6611f44565b602002602001015161174d565b989a97995050505050505050565b6003546040516325daa7df60e01b81526001600160a01b03838116600483015230602483015260009216906325daa7df90604401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116669190612120565b905080156105e9576003546001600160a01b0316638e19899e6116898484611784565b6040518263ffffffff1660e01b81526004016116a791815260200190565b600060405180830381600087803b1580156116c157600080fd5b505af115801561130a573d6000803e3d6000fd5b6060600080856001600160a01b0316856040516116f29190612462565b600060405180830381855af49150503d806000811461172d576040519150601f19603f3d011682016040523d82523d6000602084013e611732565b606091505b5091509150611743868383876117a5565b9695505050505050565b608081901c9081609082901c60a083901c600060ff60e086901c16600281111561177957611779612223565b905091939590929450565b60006001600160a01b03831660a083901b6001600160a01b03191617611337565b6060831561181457825160000361180d576001600160a01b0385163b61180d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610eea565b508161181e565b61181e8383611826565b949350505050565b8151156118365781518083602001fd5b8060405162461bcd60e51b8152600401610eea919061247e565b604051806103c00160405280601e906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b03811681146118a257600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156118dd576118dd6118a5565b60405290565b604051606081016001600160401b03811182821017156118dd576118dd6118a5565b60405161010081016001600160401b03811182821017156118dd576118dd6118a5565b604051601f8201601f191681016001600160401b0381118282101715611950576119506118a5565b604052919050565b6000806060838503121561196b57600080fd5b82356119768161188d565b91506020603f8401851361198957600080fd5b604051604081018181106001600160401b03821117156119ab576119ab6118a5565b6040528060608601878111156119c057600080fd5b8387015b818110156119db57803583529184019184016119c4565b50505080925050509250929050565b6000806000606084860312156119ff57600080fd5b8335611a0a8161188d565b92506020840135611a1a8161188d565b929592945050506040919091013590565b803563ffffffff81168114611a3f57600080fd5b919050565b600080600060a08486031215611a5957600080fd5b8335611a648161188d565b92506020611a73858201611a2b565b925085605f860112611a8457600080fd5b611a8c6118e3565b8060a0870188811115611a9e57600080fd5b604088015b81811015611ad05780356001600160f01b0381168114611ac35760008081fd5b8452928401928401611aa3565b50508093505050509250925092565b60008060208385031215611af257600080fd5b82356001600160401b0380821115611b0957600080fd5b818501915085601f830112611b1d57600080fd5b813581811115611b2c57600080fd5b8660208260051b8501011115611b4157600080fd5b60209290920196919550909350505050565b60005b83811015611b6e578181015183820152602001611b56565b50506000910152565b60008151808452611b8f816020860160208601611b53565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611bf857603f19888603018452611be6858351611b77565b94509285019290850190600101611bca565b5092979650505050505050565b60006001600160401b03821115611c1e57611c1e6118a5565b5060051b60200190565b600080600060608486031215611c3d57600080fd5b8335611c488161188d565b92506020611c57858201611a2b565b925060408501356001600160401b03811115611c7257600080fd5b8501601f81018713611c8357600080fd5b8035611c96611c9182611c05565b611928565b81815260059190911b82018301908381019089831115611cb557600080fd5b928401925b82841015611ce35783358060020b8114611cd45760008081fd5b82529284019290840190611cba565b80955050505050509250925092565b600080600060608486031215611d0757600080fd5b8335611d128161188d565b9250611d2060208501611a2b565b9150604084013561ffff81168114611d3757600080fd5b809150509250925092565b60008060408385031215611d5557600080fd5b8235611d608161188d565b946020939093013593505050565b60008060008060808587031215611d8457600080fd5b8435611d8f8161188d565b93506020850135611d9f8161188d565b92506040850135611daf8161188d565b91506060850135611dbf8161188d565b939692955090935050565b80518015158114611a3f57600080fd5b600060208284031215611dec57600080fd5b61133782611dca565b60408101818360005b6002811015611e1d578151835260209283019290910190600101611dfe565b50505092915050565b80516001600160801b0381168114611a3f57600080fd5b8051600f81900b8114611a3f57600080fd5b6000808284036060811215611e6357600080fd5b835162ffffff81168114611e7657600080fd5b92506040601f1982011215611e8a57600080fd5b50604051604081018181106001600160401b0382111715611ead57611ead6118a5565b604052611ebc60208501611e26565b8152611eca60408501611e3d565b6020820152809150509250929050565b600060a08284031215611eec57600080fd5b611ef46118bb565b9050815181526020820151602082015260408201516040820152606082015160608201526080820151608082015292915050565b600060a08284031215611f3a57600080fd5b6113378383611eda565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561095757610957611f5a565b808202811582820484141761095757610957611f5a565b600060018201611fac57611fac611f5a565b5060010190565b6000808335601e19843603018112611fca57600080fd5b8301803591506001600160401b03821115611fe457600080fd5b6020019150368190038213156104bf57600080fd5b828482376000838201600081528351612016818360208801611b53565b0195945050505050565b600081600f0b6f7fffffffffffffffffffffffffffffff19810361204657612046611f5a565b60000392915050565b80820260008212600160ff1b8414161561206b5761206b611f5a565b818105831482151761095757610957611f5a565b634e487b7160e01b600052601260045260246000fd5b6000826120a4576120a461207f565b600160ff1b8214600019841416156120be576120be611f5a565b500590565b8082018082111561095757610957611f5a565b60008060c083850312156120e957600080fd5b6120f38484611eda565b915060a083015190509250929050565b60006020828403121561211557600080fd5b81516113378161188d565b60006020828403121561213257600080fd5b5051919050565b6000826121485761214861207f565b500690565b60008261215c5761215c61207f565b500490565b60008061060080848603121561217657600080fd5b84601f85011261218557600080fd5b61218d611905565b806101008601878111156121a057600080fd5b865b818110156121c1576121b381611dca565b8452602093840193016121a2565b508195508761011f8801126121d557600080fd5b6121dd611905565b938701939250829150878411156121f357600080fd5b83811015612215576122058882611eda565b835260209092019160a0016121f3565b508093505050509250929050565b634e487b7160e01b600052602160045260246000fd5b63ffffffff851681526001600160a01b038416602082015260006006841061227157634e487b7160e01b600052602160045260246000fd5b836040830152608060608301526117436080830184611b77565b60006020828403121561229d57600080fd5b81516001600160401b03808211156122b457600080fd5b818401915084601f8301126122c857600080fd5b8151818111156122da576122da6118a5565b6122ed601f8201601f1916602001611928565b915080825285602082850101111561230457600080fd5b612315816020840160208601611b53565b50949350505050565b600060a0828403121561233057600080fd5b6123386118bb565b61234183611e3d565b815261234f60208401611e3d565b602082015261236060408401611e26565b604082015261237160608401611e26565b606082015261238260808401611e3d565b60808201529392505050565b6020808252825182820181905260009190848201906040850190845b818110156123c6578351835292840192918401916001016123aa565b50909695505050505050565b600060208083850312156123e557600080fd5b82516001600160401b038111156123fb57600080fd5b8301601f8101851361240c57600080fd5b805161241a611c9182611c05565b81815260059190911b8201830190838101908783111561243957600080fd5b928401925b828410156124575783518252928401929084019061243e565b979650505050505050565b60008251612474818460208701611b53565b9190910192915050565b6020815260006113376020830184611b7756fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206e8b37f5900788b5cb7ac05726b18b5de0f48a3ac6eee8c7941c4e450a11866764736f6c63430008130033