0x60c06040523480156200001157600080fd5b5060405162002d8838038062002d88833981016040819052620000349162000069565b6001600160a01b039182166080521660a052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a051612cac620000dc600039600081816101ce0152611a90015260008181610100015281816118d4015261195f0152612cac6000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063919ca20011610071578063919ca200146101965780639201de55146101a9578063d22cf68a146101c9578063da9bdec5146101f0578063ec489c2114610210578063f7a9f0451461023157600080fd5b80630496f53a146100b9578063060c3242146100db5780633c1740ed146100fb57806351974cc01461013a578063586c14421461015b578063825ffd921461017b575b600080fd5b6100c8670de0b6b3a764000081565b6040519081526020015b60405180910390f35b6100ee6100e9366004611e13565b610244565b6040516100d29190611eaa565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d2565b61014d610148366004611eb8565b6103db565b6040516100d2929190611ef1565b61016e610169366004611f49565b61066b565b6040516100d29190611f66565b610122739f8f72aa9304c8b593d555f12ef6589cc3a579a281565b6100ee6101a4366004612089565b610739565b6101bc6101b7366004612102565b610a46565b6040516100d2919061216b565b6101227f000000000000000000000000000000000000000000000000000000000000000081565b6102036101fe36600461217e565b610b75565b6040516100d29190612538565b61022361021e366004611f49565b61156f565b6040516100d292919061254b565b61022361023f3660046125d8565b611750565b61024c611bd5565b6000846001600160a01b031663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b49190810190612644565b604051634417a58360e01b81526001600160a01b038681166004830152919250600091871690634417a58390602401602060405180830381865afa158015610300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103249190612719565b905060005b825181101561038d5782818151811061034457610344612735565b60200260200101516001600160a01b0316856001600160a01b03160361037b576103718787848885610739565b93505050506103d4565b8061038581612761565b915050610329565b5060405162461bcd60e51b815260206004820152601660248201527514995cd95c9d9948191bd95cc81b9bdd08195e1a5cdd60521b60448201526064015b60405180910390fd5b9392505050565b6060600080846001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610442919061277a565b90506000816001600160a01b031663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610484573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104ac9190810190612644565b604051634417a58360e01b81526001600160a01b038781166004830152919250600091841690634417a58390602401602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c9190612719565b60405163eddf1b7960e01b81526001600160a01b03888116600483015291925060009185169063eddf1b7990602401602060405180830381865afa158015610568573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058c9190612797565b905060006001600160a01b0388166105a55760006105a8565b83515b6001600160401b038111156105bf576105bf611fb3565b6040519080825280602002602001820160405280156105f857816020015b6105e5611bd5565b8152602001906001900390816105dd5790505b50905060005b845181101561065d5761062d868a8688858151811061061f5761061f612735565b602002602001015185610739565b82828151811061063f5761063f612735565b6020026020010181905250808061065590612761565b9150506105fe565b509890975095505050505050565b60606000826001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d1919061277a565b9050806001600160a01b031663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103d49190810190612644565b610741611bd5565b610749611bd5565b6040516335ea6a7560e01b81526001600160a01b038581166004830152600091908916906335ea6a75906024016101e060405180830381865afa158015610794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b891906127ee565b6001600160a01b038681168452610100820151604051630ed1279f60e11b81528a831660048201529293501690631da24f3e90602401602060405180830381865afa15801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f9190612797565b602083015261083e8685611b32565b1515604083015261084f8685611b88565b15610a3b57610140810151604051630ed1279f60e11b81526001600160a01b03898116600483015290911690631da24f3e90602401602060405180830381865afa1580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c59190612797565b608083015261012081015160405163631a6fd560e11b81526001600160a01b0389811660048301529091169063c634dfaa90602401602060405180830381865afa158015610917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093b9190612797565b60a0830181905215610a3b5761012081015160405163e78c9b3b60e01b81526001600160a01b0389811660048301529091169063e78c9b3b90602401602060405180830381865afa158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b89190612797565b6060830152610120810151604051631e739ae360e21b81526001600160a01b038981166004830152909116906379ce6b8c90602401602060405180830381865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e9190612911565b64ffffffffff1660c08301525b509695505050505050565b606060005b60208160ff16108015610a7f5750828160ff1660208110610a6e57610a6e612735565b1a60f81b6001600160f81b03191615155b15610a965780610a8e8161292c565b915050610a4b565b60008160ff166001600160401b03811115610ab357610ab3611fb3565b6040519080825280601f01601f191660200182016040528015610add576020820181803683370190505b509050600091505b60208260ff16108015610b195750838260ff1660208110610b0857610b08612735565b1a60f81b6001600160f81b03191615155b156103d457838260ff1660208110610b3357610b33612735565b1a60f81b818360ff1681518110610b4c57610b4c612735565b60200101906001600160f81b031916908160001a90535081610b6d8161292c565b925050610ae5565b610b7d611c1d565b610b85611c1d565b6001600160a01b03838116808352604051638381995f60e01b81526004810191909152600091871690638381995f9060240161022060405180830381865afa158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf9919061294b565b60208101516001600160801b039081166101a0850152606082015181166101c085015260408083015182166101e08601526080830151821661020086015260a083015190911661022085015260c082015164ffffffffff166102408501526101208201516001600160a01b03908116610260860152610140830151811661028086015261016083015181166102a086015261018083015181166102c08601528451915163b3596f0760e01b815291811660048301529192509088169063b3596f0790602401602060405180830381865afa158015610cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cff9190612797565b6103a08301528151604051630495f95f60e51b81526001600160a01b039182166004820152908816906392bf2be090602401602060405180830381865afa158015610d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d72919061277a565b6001600160a01b039081166103c084015282516102608401516040516370a0823160e01b815290831660048201529116906370a0823190602401602060405180830381865afa158015610dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ded9190612797565b826102e00181815250508161026001516001600160a01b031663b1bf962d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5e9190612797565b826103000181815250508161028001516001600160a01b031663797743386040518163ffffffff1660e01b8152600401608060405180830381865afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf9190612a87565b64ffffffffff16610360860152610340850152506103208301526102a08201516040805163b1bf962d60e01b815290516001600160a01b039092169163b1bf962d916004808201926020929091908290030181865afa158015610f36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5a9190612797565b61038083015281516001600160a01b0316739f8f72aa9304c8b593d555f12ef6589cc3a579a1190161107e57600082600001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fee9190612797565b9050600083600001516001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190612797565b905061106382610a46565b604085015261107181610a46565b6020850152506111609050565b81600001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110e89190810190612b31565b826040018190525081600001516001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611132573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261115a9190810190612b31565b60208301525b8051805161ffff604082811c821660e087015260ff603084901c81166060880152602084901c831660c0880152601084901c831660a088015291831660808088018290529015156101008801528451671000000000000000811615156104c08901526708000000000000008116151561014089015267040000000000000081161515610120890152670200000000000000811615156101808901526701000000000000001615156101608801526102c0870151875183516304c7a22760e21b81526001600160a01b039182166004820152935160a89690961c9094169493169263131e889c9260248082019392918290030181865afa925050508015611283575060408051601f3d908101601f1916820190925261128091810190612b65565b60015b156112b157602081015161048086015260408101516103e08601526060810151610400860152516104a08501525b60006104208501819052610440850181905261046085015260ff81166105c0850152815160d41c64ffffffffff1684610580018181525050896001600160a01b03166369b169e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134b9190612797565b6105a08501528151640fffffffff605082901c81169160741c166106008601526105e085015281516780000000000000001615151515610560850152815167400000000000000016151515156104e08501526101c08301516001600160801b039081166105208601526101e084015181166105408601526101a0840151166105008501526105c0840151604051636c6f6ae160e01b815260ff90911660048201526000906001600160a01b038a1690636c6f6ae190602401600060405180830381865afa158015611420573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114489190810190612bca565b805161ffff9081166106208801526020820151811661064088015260408201511661066087015260608101516001600160a01b031661068087015260808101516106a087015290506114a4835167200000000000000016151590565b15156106c08601528251600160fc1b1615156106e08601526102008401516001600160801b031661070086015261010084015164ffffffffff166107208601526104c085015115611560576040516344450eaf60e11b81526001600160a01b03888116600483015289169063888a1d5e90602401602060405180830381865afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190612797565b6107408601525b50929998505050505050505050565b606061159f6040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b6000836001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611603919061277a565b90506000846001600160a01b031663026b1d5f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611669919061277a565b90506000856001600160a01b031663631adfca6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cf919061277a565b90506000866001600160a01b031663e860accb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611711573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611735919061277a565b905061174384848385611750565b9550955050505050915091565b60606117806040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b6000856001600160a01b031663d1946dbc6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117e89190810190612644565b9050600081516001600160401b0381111561180557611805611fb3565b60405190808252806020026020018201604052801561183e57816020015b61182b611c1d565b8152602001906001900390816118235790505b50905060005b82518110156118a357611873878a8a8987868151811061186657611866612735565b6020026020010151610b75565b82828151811061188557611885612735565b6020026020010181905250808061189b90612761565b915050611844565b506118d26040518060800160405280600081526020016000815260200160008152602001600060ff1681525090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119549190612797565b8160400181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119df9190612c7c565b60ff16606082015260408051638c89b64f60e01b815290516001600160a01b038b1691638c89b64f9160048083019260209291908290030181865afa925050508015611a48575060408051601f3d908101601f19168201909252611a4591810190612797565b60015b611b1b573d808015611a76576040519150601f19603f3d011682016040523d82523d6000602084013e611a7b565b606091505b50670de0b6b3a76400008260000181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b109190612797565b602083015250611b24565b80825260208201525b909890975095505050505050565b6040805180820190915260028152610dcd60f21b602082015260009060808310611b6f5760405162461bcd60e51b81526004016103cb919061216b565b50508151600182811b81019190911c1615155b92915050565b6040805180820190915260028152610dcd60f21b602082015260009060808310611bc55760405162461bcd60e51b81526004016103cb919061216b565b50509051600191821b1c16151590565b6040518060e0016040528060006001600160a01b0316815260200160008152602001600015158152602001600081526020016000815260200160008152602001600081525090565b604080516107608101825260008082526060602083018190529282018390528282018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082018190526102408201819052610260820181905261028082018190526102a082018190526102c082018190526102e08201819052610300820181905261032082018190526103408201819052610360820181905261038082018190526103a082018190526103c082018190526103e08201819052610400820181905261042082018190526104408201819052610460820181905261048082018190526104a082018190526104c082018190526104e08201819052610500820181905261052082018190526105408201819052610560820181905261058082018190526105a082018190526105c082018190526105e08201819052610600820181905261062082018190526106408201819052610660820181905261068082018190526106a08201929092526106c081018290526106e081018290526107008101829052610720810182905261074081019190915290565b6001600160a01b0381168114611e1057600080fd5b50565b600080600060608486031215611e2857600080fd5b8335611e3381611dfb565b92506020840135611e4381611dfb565b91506040840135611e5381611dfb565b809150509250925092565b80516001600160a01b0316825260208082015190830152604080820151151590830152606080820151908301526080808201519083015260a0818101519083015260c090810151910152565b60e08101611b828284611e5e565b60008060408385031215611ecb57600080fd5b8235611ed681611dfb565b91506020830135611ee681611dfb565b809150509250929050565b604080825283519082018190526000906020906060840190828701845b82811015611f3457611f21848351611e5e565b60e0939093019290840190600101611f0e565b50505060ff9490941692019190915250919050565b600060208284031215611f5b57600080fd5b81356103d481611dfb565b6020808252825182820181905260009190848201906040850190845b81811015611fa75783516001600160a01b031683529284019291840191600101611f82565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051602081016001600160401b0381118282101715611feb57611feb611fb3565b60405290565b6040516101e081016001600160401b0381118282101715611feb57611feb611fb3565b60405161022081016001600160401b0381118282101715611feb57611feb611fb3565b60405160a081016001600160401b0381118282101715611feb57611feb611fb3565b604051601f8201601f191681016001600160401b038111828210171561208157612081611fb3565b604052919050565b600080600080600085870360a08112156120a257600080fd5b86356120ad81611dfb565b955060208701356120bd81611dfb565b94506020603f19820112156120d157600080fd5b506120da611fc9565b60408701358152925060608601356120f181611dfb565b949793965091946080013592915050565b60006020828403121561211457600080fd5b5035919050565b60005b8381101561213657818101518382015260200161211e565b50506000910152565b6000815180845261215781602086016020860161211b565b601f01601f19169290920160200192915050565b6020815260006103d4602083018461213f565b600080600080600060a0868803121561219657600080fd5b85356121a181611dfb565b945060208601356121b181611dfb565b935060408601356121c181611dfb565b925060608601356121d181611dfb565b915060808601356121e181611dfb565b809150509295509295909350565b80516001600160a01b03168252600061076060208301518160208601526122188286018261213f565b91505060408301518482036040860152612232828261213f565b915050606083015160608501526080830151608085015260a083015160a085015260c083015160c085015260e083015160e08501526101008084015161227b8287018215159052565b5050610120838101511515908501526101408084015115159085015261016080840151151590850152610180808401511515908501526101a0808401516001600160801b03908116918601919091526101c0808501518216908601526101e08085015182169086015261020080850151821690860152610220808501518216908601526102408085015164ffffffffff1690860152610260808501516001600160a01b0390811691870191909152610280808601518216908701526102a0808601518216908701526102c0808601518216908701526102e08086015190870152610300808601519087015261032080860151908701526103408086015190870152610360808601519087015261038080860151908701526103a080860151908701526103c0808601518216908701526103e08086015190870152610400808601519087015261042080860151908701526104408086015190870152610460808601519087015261048080860151908701526104a080860151908701526104c0808601511515908701526104e080860151151590870152610500808601518316908701526105208086015183169087015261054080860151909216918601919091526105608085015115159086015261058080850151908601526105a080850151908601526105c08085015160ff16908601526105e0808501519086015261060080850151908601526106208085015161ffff9081169187019190915261064080860151821690870152610660808601519091169086015261068080850151909116908501526106a080840151858303828701526124d8838261213f565b925050506106c0808401516124f08287018215159052565b50506106e083810151151590850152610700808401516001600160801b0316908501526107208084015164ffffffffff16908501526107409283015192909301919091525090565b6020815260006103d460208301846121ef565b600060a0820160a0835280855180835260c08501915060c08160051b8601019250602080880160005b838110156125a25760bf198887030185526125908683516121ef565b95509382019390820190600101612574565b5050839450865181870152808701516040870152505050506040830151606083015260ff60608401511660808301529392505050565b600080600080608085870312156125ee57600080fd5b84356125f981611dfb565b9350602085013561260981611dfb565b9250604085013561261981611dfb565b9150606085013561262981611dfb565b939692955090935050565b805161263f81611dfb565b919050565b6000602080838503121561265757600080fd5b82516001600160401b038082111561266e57600080fd5b818501915085601f83011261268257600080fd5b81518181111561269457612694611fb3565b8060051b91506126a5848301612059565b81815291830184019184810190888411156126bf57600080fd5b938501935b838510156126e957845192506126d983611dfb565b82825293850193908501906126c4565b98975050505050505050565b60006020828403121561270757600080fd5b61270f611fc9565b9151825250919050565b60006020828403121561272b57600080fd5b6103d483836126f5565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016127735761277361274b565b5060010190565b60006020828403121561278c57600080fd5b81516103d481611dfb565b6000602082840312156127a957600080fd5b5051919050565b80516001600160801b038116811461263f57600080fd5b805164ffffffffff8116811461263f57600080fd5b805161ffff8116811461263f57600080fd5b60006101e0828403121561280157600080fd5b612809611ff1565b61281384846126f5565b8152612821602084016127b0565b6020820152612832604084016127b0565b6040820152612843606084016127b0565b6060820152612854608084016127b0565b608082015261286560a084016127b0565b60a082015261287660c084016127c7565b60c082015261288760e084016127dc565b60e082015261010061289a818501612634565b908201526101206128ac848201612634565b908201526101406128be848201612634565b908201526101606128d0848201612634565b908201526101806128e28482016127b0565b908201526101a06128f48482016127b0565b908201526101c06129068482016127b0565b908201529392505050565b60006020828403121561292357600080fd5b6103d4826127c7565b600060ff821660ff81036129425761294261274b565b60010192915050565b6000610220828403121561295e57600080fd5b612966612014565b61297084846126f5565b815261297e602084016127b0565b602082015261298f604084016127b0565b60408201526129a0606084016127b0565b60608201526129b1608084016127b0565b60808201526129c260a084016127b0565b60a08201526129d360c084016127c7565b60c08201526129e460e084016127dc565b60e08201526101006129f78185016127c7565b90820152610120612a09848201612634565b90820152610140612a1b848201612634565b90820152610160612a2d848201612634565b90820152610180612a3f848201612634565b908201526101a0612a518482016127b0565b908201526101c0612a638482016127b0565b908201526101e0612a758482016127b0565b908201526102006129068482016127b0565b60008060008060808587031215612a9d57600080fd5b845193506020850151925060408501519150612abb606086016127c7565b905092959194509250565b600082601f830112612ad757600080fd5b81516001600160401b03811115612af057612af0611fb3565b612b03601f8201601f1916602001612059565b818152846020838601011115612b1857600080fd5b612b2982602083016020870161211b565b949350505050565b600060208284031215612b4357600080fd5b81516001600160401b03811115612b5957600080fd5b612b2984828501612ac6565b600060808284031215612b7757600080fd5b604051608081018181106001600160401b0382111715612b9957612b99611fb3565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060208284031215612bdc57600080fd5b81516001600160401b0380821115612bf357600080fd5b9083019060a08286031215612c0757600080fd5b612c0f612037565b612c18836127dc565b8152612c26602084016127dc565b6020820152612c37604084016127dc565b60408201526060830151612c4a81611dfb565b6060820152608083015182811115612c6157600080fd5b612c6d87828601612ac6565b60808301525095945050505050565b600060208284031215612c8e57600080fd5b815160ff811681146103d457600080fdfea164736f6c6343000813000a0000000000000000000000006bf14cb0a831078629d993fdebcb182b21a8774c0000000000000000000000006bf14cb0a831078629d993fdebcb182b21a8774c