0x60a06040523480156200001157600080fd5b5060405162002b3b38038062002b3b833981016040819052620000349162000070565b806001600160a01b0381166200005d57604051636cdc033760e11b815260040160405180910390fd5b6001600160a01b031660805250620000a2565b6000602082840312156200008357600080fd5b81516001600160a01b03811681146200009b57600080fd5b9392505050565b608051612a6f620000cc600039600081816105560152818161077401526122c60152612a6f6000f3fe6080604052600436106101805760003560e01c8063aa99020c116100d6578063c94dcf8f1161007f578063f76fc35e11610059578063f76fc35e14610678578063fc63e69e146106ac578063fd967f47146106cc57600080fd5b8063c94dcf8f14610618578063d73f3aab14610638578063f57402961461065857600080fd5b8063b3a408b8116100b0578063b3a408b814610544578063b84158a414610590578063c7dd3228146105f657600080fd5b8063aa99020c146104d2578063ac1fc22c146104e5578063aec96b6e1461052457600080fd5b806322163b86116101385780635e4a8fac116101125780635e4a8fac14610474578063615387c5146104945780636aa99da3146104b457600080fd5b806322163b86146103a45780633644e515146103dd578063522f73861461045457600080fd5b806308bfa2bf1161016957806308bfa2bf14610340578063153229bd146103575780631847f6b21461037757600080fd5b806301ffc9a71461018557806303a6ccd0146101ba575b600080fd5b34801561019157600080fd5b506101a56101a036600461235b565b6106e9565b60405190151581526020015b60405180910390f35b3480156101c657600080fd5b506103336101d53660046123af565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152506001600160a01b0391821660008181526001602081815260408084206001600160801b0396909616808552958252808420815160808082018452915463ffffffff8082168352640100000000808304821684880190815268010000000000000000840461ffff9081168689019081526a010000000000000000000090950460ff16151560608088019182529c8c5260038a52888c209d8c529c8952998790208751610120810189529551841686529051831697850197909752915190971693820193909352965115159587019590955281546bffffffffffffffffffffffff81169587019590955291015480831660a086015260c08501839052041660e0830152600160601b900490911661010082015290565b6040516101b191906123e8565b34801561034c57600080fd5b50610355610715565b005b34801561036357600080fd5b506103556103723660046124cc565b6107ed565b34801561038357600080fd5b50610397610392366004612513565b6109ec565b6040516101b191906125a8565b3480156103b057600080fd5b50600054600160801b90046001600160801b03165b6040516001600160801b0390911681526020016101b1565b3480156103e957600080fd5b50610446604080517f43739ac7cade4ea5f1688343544775f4617dfc8454270217b257df53facc1fe56020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b6040519081526020016101b1565b34801561046057600080fd5b5061035561046f3660046125fc565b610afc565b34801561048057600080fd5b5061035561048f366004612647565b610d0e565b3480156104a057600080fd5b506103c56104af3660046126b5565b610f2e565b3480156104c057600080fd5b506000546001600160801b03166103c5565b6103556104e036600461273f565b611036565b3480156104f157600080fd5b506103c561050036600461281b565b6001600160a01b03166000908152600260205260409020546001600160801b031690565b34801561053057600080fd5b5061035561053f366004612838565b611159565b34801561055057600080fd5b506105787f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101b1565b34801561059c57600080fd5b506103c56105ab366004612890565b6001600160a01b03841660009081526003602090815260408083206001600160801b03871684529091529020546bffffffffffffffffffffffff1663ffffffff821602949350505050565b34801561060257600080fd5b5060405163a61bd96f60e01b81526020016101b1565b34801561062457600080fd5b506101a5610633366004612647565b61139c565b34801561064457600080fd5b506103556106533660046128d1565b6113b0565b34801561066457600080fd5b5061035561067336600461281b565b6115e6565b34801561068457600080fd5b506104467fdff7e9c4aa6cea44fe3d4cdfcaef72185a01f591d215cbb4466472333dd715c281565b3480156106b857600080fd5b506103556106c736600461290f565b61164b565b3480156106d857600080fd5b5060405161271081526020016101b1565b60006106f48261184d565b8061070f57506001600160e01b0319821663a61bd96f60e01b145b92915050565b600054600160801b90046001600160801b031680156107ea57600080546001600160801b03169055604080517f946f7c9e00000000000000000000000000000000000000000000000000000000815290516107ea916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163946f7c9e916004808201926020929091908290030181865afa1580156107c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e4919061294d565b826118b5565b50565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561082c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610850919061294d565b6001600160a01b0316336001600160a01b03161415801561094d5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108de919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094b9190612983565b155b1561096a576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03841660008181526003602090815260408083206001600160801b03881680855290835292819020600101805463ffffffff191663ffffffff881690811790915590519081529192917f4c3c29668821111c3ddbcf87e1cd6047dc735ef691d46e09671629cb42cdd94891015b60405180910390a350505050565b60608167ffffffffffffffff811115610a0757610a076129a0565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b50905060005b82811015610af3576000610abf8787878786818110610a5757610a576129b6565b9050602002016020810190610a6c91906129cc565b6001600160a01b03831660009081526004602090815260408083206001600160801b0386168452825280832062ffffff600886901c1680855292529091205460ff831681811c6001169293509350935093565b505050905080600114838381518110610ada57610ada6129b6565b9115156020928302919091019091015250600101610a36565b50949350505050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5f919061294d565b6001600160a01b0316336001600160a01b031614158015610c5c5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a9190612983565b155b15610c79576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03841660008181526001602090815260408083206001600160801b0388168085529083529281902080546aff0000000000000000000019166a0100000000000000000000881515908102919091179091558151938452918301919091527fe430910c8e4bfa8180b70a0b2aa923b82d6712a1d165e223053ef439a3f86147910160405180910390a250505050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d71919061294d565b6001600160a01b0316336001600160a01b031614158015610e6e5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ddb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dff919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015610e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6c9190612983565b155b15610e8b576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038216610eb25760405163327effa960e11b815260040160405180910390fd5b6001600160a01b0384811660008181526003602090815260408083206001600160801b0389168085529083529281902080546bffffffffffffffffffffffff16600160601b9689169687021790555193845290927fc8ec2b291d7cbcf6165a8844ec7b6c36f4a44bd4354fb66c38b24fa80e7705f891016109de565b60006001600160a01b038616610f575760405163327effa960e11b815260040160405180910390fd5b610f63888585856118d1565b6001600160a01b0389811660008181526003602090815260408083206001600160801b038716808552908352928190206bffffffffffffffffffffffff8e16600160601b968e169687028117825560018201805463ffffffff191663ffffffff8f8116918217909255845192835294820197909752918201929092528985166060820152938816608085015261ffff871660a0850152939450917fc45c390e50203f00a8f9ddc28e36a34083e2465d51d4e00537fac057c91edbb39060c00160405180910390a350979650505050505050565b8463ffffffff168663ffffffff16111561107c576040517fa55a518600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0380891660009081526003602090815260408083206001600160801b038c168452909152902080549091600160601b909104166110d35760405163327effa960e11b815260040160405180910390fd5b60018101546110f49063ffffffff64010000000082048116918a9116611bc1565b60018201805463ffffffff929092166401000000000267ffffffff0000000019909216919091179055805461114290859085906001600160a01b03600160601b90910416858d8d8c8c611c3f565b61114e89898988611e9d565b505050505050505050565b83806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc919061294d565b6001600160a01b0316336001600160a01b0316141580156112b95750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124a919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b79190612983565b155b156112d6576040516282b42960e81b815260040160405180910390fd5b82828063ffffffff168263ffffffff16106113045760405163536a71af60e01b815260040160405180910390fd5b6001600160a01b03871660008181526001602090815260408083206001600160801b038b1680855290835292819020805463ffffffff8b811667ffffffffffffffff199092168217640100000000918c16918202179092558251908152928301529192917f13bc03d97cc4e2accb3b8290af069c19619d32a4e9c5219f8580108766fb18fd910160405180910390a350505050505050565b6001600160a01b03811615155b9392505050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611413919061294d565b6001600160a01b0316336001600160a01b0316141580156115105750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561147d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a1919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190612983565b155b1561152d576040516282b42960e81b815260040160405180910390fd5b8161271061ffff8216111561155557604051631a52ce6f60e01b815260040160405180910390fd5b6001600160a01b03851660008181526001602090815260408083206001600160801b03891680855290835292819020805469ffff000000000000000019166801000000000000000061ffff8a169081029190911790915590519081529192917fae6d744348a49699fcb91e6a563f2224c0fb27c21053a9218ee827f9d6e698c7910160405180910390a35050505050565b6001600160a01b0381166000908152600260205260409020546001600160801b03168015611647576001600160a01b038216600090815260026020526040902080546fffffffffffffffffffffffffffffffff1916905561164782826118b5565b5050565b82806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae919061294d565b6001600160a01b0316336001600160a01b0316141580156117ab5750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611785573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a99190612983565b155b156117c8576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03841660008181526003602090815260408083206001600160801b0388168085529083529281902080546bffffffffffffffffffffffff19166bffffffffffffffffffffffff881690811790915590519081529192917f7c77af090cbae157811da55b6d8ae1e307a85f5aa1dd2f7a13183279a8c2b4b291016109de565b60006001600160e01b031982167f37c74bd800000000000000000000000000000000000000000000000000000000148061070f57506001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60008060008084865af16116475763b12d13eb6000526004601cfd5b600084806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611936919061294d565b6001600160a01b0316336001600160a01b031614158015611a335750806001600160a01b031663514e62fc33836001600160a01b03166375b238fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c4919061296a565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a319190612983565b155b15611a50576040516282b42960e81b815260040160405180910390fd5b84848063ffffffff168263ffffffff1610611a7e5760405163536a71af60e01b815260040160405180910390fd5b8461271061ffff82161115611aa657604051631a52ce6f60e01b815260040160405180910390fd5b600080546001600160a01b038b1682526001602081815260408085206001600160801b0390941680865293909152909220805461ffff8a16680100000000000000000269ffff00000000000000001963ffffffff8d81166401000000000267ffffffffffffffff19909416908f1617929092179190911617815590965090611b2f9087906129e7565b600080546fffffffffffffffffffffffffffffffff19166001600160801b0392831617905560408051918816825263ffffffff808c1660208401528a169082015261ffff8816606082015233906001600160a01b038c16907feeb5941fb79bbfe40edd76c2e086e8ccdb0b463fc8ac07416266100b4dfddccf9060800160405180910390a35050505050949350505050565b600063ffffffff84811681851601908316811115611c37576000611bf58463ffffffff168763ffffffff1680821191030290565b6040517fbdc0f4ce00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201529091506024015b60405180910390fd5b949350505050565b6000611c9d604080517f43739ac7cade4ea5f1688343544775f4617dfc8454270217b257df53facc1fe56020820152469181019190915230606082015260009060800160405160208183030381529060405280519060200120905090565b604080517fdff7e9c4aa6cea44fe3d4cdfcaef72185a01f591d215cbb4466472333dd715c2602082015233918101919091526001600160801b038616606082015263ffffffff8089166080830152851660a08201526001600160a01b03841660c082015260e00160405160208183030381529060405280519060200120604051602001611d5c9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60408051601f19818403018152919052805160209091012090506001600160a01b038716611d8b828b8b612213565b6001600160a01b031614611dcb576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851660009081526004602090815260408083206001600160801b0388168452825280832062ffffff60088b901c1680855292529091205460ff881681811c600116928315611e4d576040517f900bb2c900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0390981660009081526004602090815260408083206001600160801b03909a1683529881528882209982529890985295909620600190951b959095179093555050505050505050565b6001600160a01b03841660009081526001602090815260408083206001600160801b03871684529091529020805463ffffffff8082169164010000000090041642821115611f145760405163296f4f6960e01b815242600482015263ffffffff808416602483015282166044820152606401611c2e565b8063ffffffff16421115611f515760405163296f4f6960e01b815242600482015263ffffffff808416602483015282166044820152606401611c2e565b82546a0100000000000000000000900460ff1615611f9b576040517fd7d248ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506001600160a01b03851660009081526003602090815260408083206001600160801b03881684529091528120546bffffffffffffffffffffffff1663ffffffff8516029050806001600160801b0316341015612036576040517ff3ebc3840000000000000000000000000000000000000000000000000000000081523460048201526001600160801b0382166024820152604401611c2e565b60008061204283612282565b91509150600061205389898861139c565b9050600081156120c6575084546001600160a01b038716600090815260026020526040902080546001600160801b0381811661271061ffff68010000000000000000909604959095168883160294909404938401166fffffffffffffffffffffffffffffffff1990911617905592839003925b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152336004820181905263ffffffff8a166024830152906001600160801b03808c16916001600160a01b038e16917f3d73a0206d94d61b7038abcd0eb766a5de22f9844b38a78449054d19a4f1b58a9183916340c10f1991908b169060440160206040518083038185885af1158015612167573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061218c919061296a565b6040805163ffffffff9283168152918e1660208301526001600160801b038b8116838301528981166060840152871660808301526001600160a01b038d1660a083015287151560c0830152519081900360e00190a4846001600160801b03163411156122075761220733866001600160801b031634036118b5565b50505050505050505050565b6000604182036113a9576040516040846040377f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0606051116122785784600052604084013560001a602052602060406080600060015afa5060006060523d6060035191505b6040529392505050565b6040517f0d411b210000000000000000000000000000000000000000000000000000000081526001600160801b038216600482015260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630d411b2190602401602060405180830381865afa15801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123319190612a1c565b600080546001600160801b03600160801b8083048216850182160291161790559283900393915050565b60006020828403121561236d57600080fd5b81356001600160e01b0319811681146113a957600080fd5b6001600160a01b03811681146107ea57600080fd5b6001600160801b03811681146107ea57600080fd5b600080604083850312156123c257600080fd5b82356123cd81612385565b915060208301356123dd8161239a565b809150509250929050565b60006101208201905063ffffffff80845116835280602085015116602084015250604083015161241e604084018261ffff169052565b506060830151612432606084018215159052565b50608083015161245260808401826bffffffffffffffffffffffff169052565b5060a083015161246a60a084018263ffffffff169052565b5060c083015161248260c084018263ffffffff169052565b5060e083015161249a60e084018263ffffffff169052565b50610100928301516001600160a01b0316919092015290565b803563ffffffff811681146124c757600080fd5b919050565b6000806000606084860312156124e157600080fd5b83356124ec81612385565b925060208401356124fc8161239a565b915061250a604085016124b3565b90509250925092565b6000806000806060858703121561252957600080fd5b843561253481612385565b935060208501356125448161239a565b9250604085013567ffffffffffffffff8082111561256157600080fd5b818701915087601f83011261257557600080fd5b81358181111561258457600080fd5b8860208260051b850101111561259957600080fd5b95989497505060200194505050565b6020808252825182820181905260009190848201906040850190845b818110156125e25783511515835292840192918401916001016125c4565b50909695505050505050565b80151581146107ea57600080fd5b60008060006060848603121561261157600080fd5b833561261c81612385565b9250602084013561262c8161239a565b9150604084013561263c816125ee565b809150509250925092565b60008060006060848603121561265c57600080fd5b833561266781612385565b925060208401356126778161239a565b9150604084013561263c81612385565b80356bffffffffffffffffffffffff811681146124c757600080fd5b803561ffff811681146124c757600080fd5b600080600080600080600060e0888a0312156126d057600080fd5b87356126db81612385565b96506126e960208901612687565b955060408801356126f981612385565b9450612707606089016124b3565b9350612715608089016124b3565b925061272360a089016124b3565b915061273160c089016126a3565b905092959891949750929550565b60008060008060008060008060e0898b03121561275b57600080fd5b883561276681612385565b975060208901356127768161239a565b965061278460408a016124b3565b955061279260608a016124b3565b945060808901356127a281612385565b935060a089013567ffffffffffffffff808211156127bf57600080fd5b818b0191508b601f8301126127d357600080fd5b8135818111156127e257600080fd5b8c60208285010111156127f457600080fd5b60208301955080945050505061280c60c08a016124b3565b90509295985092959890939650565b60006020828403121561282d57600080fd5b81356113a981612385565b6000806000806080858703121561284e57600080fd5b843561285981612385565b935060208501356128698161239a565b9250612877604086016124b3565b9150612885606086016124b3565b905092959194509250565b600080600080608085870312156128a657600080fd5b84356128b181612385565b935060208501356128c18161239a565b9250604085013561287781612385565b6000806000606084860312156128e657600080fd5b83356128f181612385565b925060208401356129018161239a565b915061250a604085016126a3565b60008060006060848603121561292457600080fd5b833561292f81612385565b9250602084013561293f8161239a565b915061250a60408501612687565b60006020828403121561295f57600080fd5b81516113a981612385565b60006020828403121561297c57600080fd5b5051919050565b60006020828403121561299557600080fd5b81516113a9816125ee565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129de57600080fd5b6113a9826124b3565b6001600160801b03818116838216019080821115612a1557634e487b7160e01b600052601160045260246000fd5b5092915050565b600060208284031215612a2e57600080fd5b81516113a98161239a56fea2646970667358221220d459f3826151023e29c7cefb7b2bc4bf642bc9ff754f364966a3b2ccf34081f764736f6c6343000810003300000000000000000000000061353b0c3c3aae4e6c9e4e9fcde4a4be4417d2fa